fork download
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #define maxi(a,b) ((a>b)?a:b)
  4. typedef struct
  5. {
  6. int topa;
  7. int a[100001];
  8. }stacka;
  9. typedef struct{
  10. int topb;
  11. int b[100001];
  12. }stackb;
  13. void pusha(stacka** p ,int val);
  14. void pushb(stackb** p,int val);
  15. int main()
  16. {
  17. long int t,sum,x,i,count,n,m,max;
  18. scanf("%ld",&t);
  19. stacka *sa=(stacka *) malloc(sizeof(stacka));
  20. stackb *sb=(stackb *) malloc(sizeof(stackb));
  21. while(t--)
  22. {
  23. sum=0;
  24. count=0;
  25. sa->topa=-1;
  26. sb->topb=-1;
  27. max=0;
  28. scanf("%ld %ld %ld",&n,&m,&x);
  29. int temp[n];
  30. for(i=0;i<n;i++)
  31. scanf("%d",temp+i);
  32. for(i=n-1;i>=0;i--)
  33. pusha(&sa,temp[i]);
  34. temp[m];
  35. for(i=0;i<m;i++)
  36. scanf("%d",temp+i);
  37. for(i=m-1;i>=0;i--)
  38. pushb(&sb,temp[i]);
  39. while(sa->topa!=-1 && sum+sa->a[sa->topa]<=x)
  40. {
  41. sum+=sa->a[sa->topa--];
  42. count++;
  43. }
  44. max=count;
  45. while(sb->topb!=-1)
  46. {
  47. while(sum+sb->b[sb->topb]>x && sa->topa<n-1)
  48. {
  49. sa->topa++;
  50. sum-=sa->a[sa->topa];
  51. // printf("%ld",sa->a[sa->topa]);
  52. count--;
  53.  
  54. }
  55. while(sum+sb->b[sb->topb]<=x && sb->topb!=-1)
  56. {
  57. sum+=sb->b[sb->topb];
  58. count++;
  59. sb->topb--;
  60. }
  61. break;
  62. }
  63. printf("%d\n",maxi(max,count));
  64. }
  65. return 0;
  66. }
  67. void pusha(stacka** p ,int val)
  68. {
  69. (*p)->a[++(*p)->topa]=val;
  70. }
  71. void pushb(stackb** p,int val)
  72. {
  73. (*p)->b[++(*p)->topb]=val;
  74. }
  75.  
Time limit exceeded #stdin #stdout 5s 4456KB
stdin
Standard input is empty
stdout
Standard output is empty