Guest User

strudel

a guest
Dec 9th, 2016
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.27 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <assert.h>
  3.  
  4. #define MAXN 100000
  5.  
  6. int diff[MAXN];
  7.  
  8. bool f(int test, int N){
  9.     int sum = 0;
  10.     for(int i=0;i<test;i++)
  11.         sum += diff[i];
  12.     if(sum >= 0)
  13.         return true;
  14.        
  15.     for(int i=1;i+test-1<N;i++){
  16.         sum -= diff[i-1];
  17.         sum += diff[i+test-1];
  18.         if(sum >= 0)
  19.             return true;
  20.     }
  21.     return false;
  22. }
  23.  
  24. int porziona(int N, int mandorle[], int cannella[]) {
  25.     int answer = -1;
  26.     int lb = 1;
  27.     int ub = N;
  28.    
  29.     for(int i=0;i<N;i++)
  30.         diff[i] = cannella[i] - mandorle[i];
  31.    
  32.     while(lb <= ub){
  33.         int test = lb + (ub - lb)/2;
  34.         if(f(test, N)){
  35.             answer = test;
  36.             lb = test + 1;
  37.         }
  38.         else
  39.             ub = test - 1;
  40.     }
  41.  
  42.     return answer;
  43. }
  44.  
  45.  
  46. int mandorle[MAXN], cannella[MAXN];
  47.  
  48. int main() {
  49.     FILE *fr, *fw;
  50.     int N, i;
  51.  
  52.     fr = fopen("input.txt", "r");
  53.     fw = fopen("output.txt", "w");
  54.     assert(1 == fscanf(fr, "%d", &N));
  55.     for(i=0; i<N; i++)
  56.         assert(1 == fscanf(fr, "%d", &mandorle[i]));
  57.     for(i=0; i<N; i++)
  58.         assert(1 == fscanf(fr, "%d", &cannella[i]));
  59.  
  60.     fprintf(fw, "%d\n", porziona(N, mandorle, cannella));
  61.     fclose(fr);
  62.     fclose(fw);
  63.     return 0;
  64. }
Advertisement
Add Comment
Please, Sign In to add comment