91分求助,第九组数据长得什么样?

P1528 切蛋糕

@[SuperOreo](/space/show?uid=86444) 快读+register试试?
by 引领天下 @ 2018-10-31 22:13:52


@[引领天下](/space/show?uid=39863) 谢谢关心,不过好像没卡这 ```cpp #pragma GCC optimize(3) #include<cstdio> #include<algorithm> using namespace std; inline void read(int &a){ a = 0;static char t = getchar(); while(t>'9' || t<'0')t=getchar(); while(t>='0' && t<='9'){ a = (a << 3) + (a << 1) + (t^ 48); t=getchar(); } } int ans,m,n,Sum,Waste; int Cake[51],ClaM[1025],ClSum[1025]; bool search(int whi,int from){ if(!whi) return true; if(Sum - Waste < ClSum[ans]) return false; int nextF; if(ClaM[whi - 1] == ClaM[whi]) nextF = from; else nextF = 1; for(register int i=from; i<=n; i++){ if(Cake[i] >= ClaM[whi]){ Cake[i] -= ClaM[whi]; if(Cake[i] < ClaM[1]) Waste += Cake[i]; if(search(whi - 1, nextF)){ if(Cake[i] < ClaM[1]) Waste -= Cake[i]; Cake[i] += ClaM[whi]; return true; } if(Cake[i] < ClaM[1]) Waste -= Cake[i]; Cake[i] += ClaM[whi]; } } return false; } int main(){ read(n); // scanf("%d", &n); register int i; for(i=1; i<=n; i++){ read(Cake[i]); // scanf("%d", &Cake[i]); Sum += Cake[i]; } // scanf("%d", &m); read(m); for(i=1; i<=m; i++){ // scanf("%d", &ClaM[i]); read(ClaM[i]); ClSum[i] = ClSum[i-1] + ClaM[i]; } sort(ClaM + 1, ClaM + 1 + m); sort(Cake + 1, Cake + 1 + n); for(i=1; i<=m; i++) ClSum[i] = ClSum[i-1] + ClaM[i]; while(ClaM[m] > Cake[n]) m--; for(ans = 1; ans<=m; ans++){ if(!search(ans, 1)){ break; } } printf("%d", ans-1); // ans = m; // if(search(m, 1)){ // printf("%d", m); // return 0; // } // int l = 0,r = m; // while(l+1 != r){ // ans = (l+r)>>1; // if(!search(ans, 1)){ // r = ans; // }else{ // l = ans; // } // } // printf("%d", l); return 0; } ```
by SuperOreo @ 2018-10-31 22:18:53


@[SuperOreo](/space/show?uid=86444) 再加上快输,变量别重复开
by 引领天下 @ 2018-11-01 20:05:56


.
by int64 @ 2021-11-14 09:23:27


|