Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <assert.h>
- #define MAXN 100000
- int diff[MAXN];
- bool f(int test, int N){
- int sum = 0;
- for(int i=0;i<test;i++)
- sum += diff[i];
- if(sum >= 0)
- return true;
- for(int i=1;i+test-1<N;i++){
- sum -= diff[i-1];
- sum += diff[i+test-1];
- if(sum >= 0)
- return true;
- }
- return false;
- }
- int porziona(int N, int mandorle[], int cannella[]) {
- int answer = -1;
- int lb = 1;
- int ub = N;
- for(int i=0;i<N;i++)
- diff[i] = cannella[i] - mandorle[i];
- while(lb <= ub){
- int test = lb + (ub - lb)/2;
- if(f(test, N)){
- answer = test;
- lb = test + 1;
- }
- else
- ub = test - 1;
- }
- return answer;
- }
- int mandorle[MAXN], cannella[MAXN];
- int main() {
- FILE *fr, *fw;
- int N, i;
- fr = fopen("input.txt", "r");
- fw = fopen("output.txt", "w");
- assert(1 == fscanf(fr, "%d", &N));
- for(i=0; i<N; i++)
- assert(1 == fscanf(fr, "%d", &mandorle[i]));
- for(i=0; i<N; i++)
- assert(1 == fscanf(fr, "%d", &cannella[i]));
- fprintf(fw, "%d\n", porziona(N, mandorle, cannella));
- fclose(fr);
- fclose(fw);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment