奇奇怪怪的题目,不知道他要我们干什么。
我们观察一波局势,发现答案最大不过5.因为如果答案是6或以上的话,我们就至少要2^(5*5)个5*5的方格。
仔细计算一波时间复杂度,再信仰一波,坚信暴力压正解。
#include<bits/stdc++.h> #define sight(c) (‘0‘<=c&&c<=‘9‘) #define N 200007 #define int long long using namespace std; inline void read(int &x){ static char c; for (c=getchar();!sight(c);c=getchar()); for (x=0;sight(c);c=getchar()) x=x*10+c-48; } void write(int x){if (x<10) {putchar(‘0‘+x); return;} write(x/10); putchar(‘0‘+x%10);} inline void writeln(int x){ if (x<0) putchar(‘-‘),x*=-1; write(x); putchar(‘\n‘); } int n,W,WW,T,c[N],t[N],v[N],ans,V,g; signed main() { //freopen("a.in","r",stdin); read(n);read(W);read(T); WW=W; for (int i=1;i<=n;i++) read(c[i]),read(t[i]),read(v[i]); ans=W; for (int i=1;i<=n;i++) { W-=c[i];T-=t[i]; if (W<0) if (V) {g=(-W)/V+((-W)%V?1:0);T-=g;W+=V*g;} else break; if (T<0) break; W+=t[i]*V;V+=v[i]; ans=max(ans,W+T*V); } writeln(ans-WW); return 0; }