Submission #478122

#TimeUsernameProblemLanguageResultExecution timeMemory
478122nicolaalexandraRemittance (JOI19_remittance)C++14
15 / 100
1 ms304 KiB
#include <bits/stdc++.h> #define DIM 100010 using namespace std; long long a[DIM],b[DIM],x[DIM],p[22]; int n,i; int main (){ //ifstream cin ("date.in"); //ofstream cout ("date.out"); cin>>n; for (i=1;i<=n;i++) cin>>a[i]>>b[i]; if (n == 1){ if (a[i] != b[i]) cout<<"No"; else cout<<"Yes"; return 0; } if (n == 2){ long long val = a[1] - b[1] + 2 * (a[2] - b[2]); if (val % 3){ cout<<"No"; return 0; } x[2] = val / 3; if ( (a[1] - b[1] + x[2]) % 2){ cout<<"No"; return 0; } x[1] = (a[1] - b[1] + x[2]) / 2; if (x[1] < 0 || x[2] < 0){ cout<<"No"; return 0; } cout<<"Yes"; return 0; } p[0] = 1; for (i=1;i<=20;i++) p[i] = p[i-1] * 2; long long val = p[n-1] * (a[1] - b[1]) + p[n-2] * (a[n] - b[n]); for (i=n-1;i>=2;i--) val += p[i-2] * (a[i] - b[i]); if (val % (p[n]-1)){ cout<<"No"; return 0; } x[1] = val / (p[n]-1); if (val < 0){ cout<<"No"; return 0; } for (i=2;i<=n;i++){ long long val = a[i] - b[i] + x[i-1]; if (val % 2 || val < 0){ cout<<"No"; return 0; } x[i] = val / 2; } for (i=1;i<=n;i++){ long long val = a[i] + x[ (i > 1) ? (i-1) : (n) ] - 2 * x[i]; if ( val != b[i] ){ cout<<"No"; return 0; } } for (i=1;i<=n;i++){ /// trimit cat de mult pot if (2 * x[i] <= a[i]){ a[i] -= 2 * x[i]; a[ (i < n) ? (i+1) : (1)] += x[i]; x[i] = 0; } else { long long val = a[i] / 2; a[i] -= 2 * val; a[(i < n) ? (i+1) : (1)] += val; x[i] -= val; } } for (i=1;i<=n;i++){ /// trimit cat de mult pot if (2 * x[i] <= a[i]){ a[i] -= 2 * x[i]; a[ (i < n) ? (i+1) : (1)] += x[i]; x[i] = 0; } else { long long val = a[i] / 2; a[i] -= 2 * val; a[(i < n) ? (i+1) : (1)] += val; x[i] -= val; } } int ok = 1; for (i=1;i<=n;i++) if (x[i] != 0 || a[i] != b[i]) ok = 0; if (!ok) cout<<"No"; else cout<<"Yes"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...