Submission #580469

#TimeUsernameProblemLanguageResultExecution timeMemory
580469yutabiDivide and conquer (IZhO14_divide)C++14
100 / 100
84 ms4372 KiB
#include <bits/stdc++.h> using namespace std; #define pb push_back typedef long long ll; typedef pair <ll,ll> ii; ll l; ll r; ll m; int n; vector <ll> x; vector <ll> g; vector <ll> d; vector <ll> real_d; vector <ll> best; bool flag; ll ptr1,ptr2; ll cost; ll gold; ll electric; ll xptr2; int main() { scanf("%d",&n); best=vector <ll> (n+1); g.pb(0); d.pb(0); for(int i=0;i<n;i++) { ll a,b,c; scanf(" %lld %lld %lld",&a,&b,&c); x.pb(a); g.pb(b); g[g.size()-1]+=g[g.size()-2]; d.pb(c); d[d.size()-1]+=d[d.size()-2]; real_d.pb(c); } ptr1=n-1; ptr2=n; while(1) { if(ptr1<1) { for(int i=ptr1+1;i<=ptr2;i++) { best[i]=ptr2; } break; } cost=x[ptr2-1]-x[ptr1]; electric=d[ptr2]-d[ptr1]; if(ptr1==2) { //printf("\n%lld %lld\n\n",cost,electric); } if(electric>=cost) { ptr1--; } else { for(int i=ptr1+2;i<=ptr2;i++) { best[i]=ptr2; } ptr2=ptr1+1; } } /*for(int i=1;i<=n;i++) { printf("%lld ",best[i]); } printf("\n");*/ l=0; r=100000000000000007; m=(l+r+1)/2; while(l!=r) { //if(m<100)\ printf("%lld %lld %lld\n",l,m,r); flag=0; ptr1=0,ptr2=1; while(1) { xptr2=best[ptr2]; cost=x[xptr2-1]-x[ptr1]; gold=g[xptr2]-g[ptr1]; electric=d[xptr2]-d[ptr1]; //if(m<100)\ printf("%lld %lld %lld %lld %lld\n",ptr1,ptr2,cost,gold,electric); if(gold<m) { if(ptr2>=n) { break; } ptr2++; } else { if(electric>=cost) { flag=1; break; } ptr1++; } } if(flag) { l=m; } else { r=m-1; } m=(l+r+1)/2; } printf("%lld\n",m); }

Compilation message (stderr)

divide.cpp:112:9: warning: multi-line comment [-Wcomment]
  112 |         //if(m<100)\
      |         ^
divide.cpp:127:13: warning: multi-line comment [-Wcomment]
  127 |             //if(m<100)\
      |             ^
divide.cpp: In function 'int main()':
divide.cpp:35:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   35 |     scanf("%d",&n);
      |     ~~~~~^~~~~~~~~
divide.cpp:46:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   46 |         scanf(" %lld %lld %lld",&a,&b,&c);
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...