社区讨论
关于本题多测清空的疑问,悬关
P7432 [THUPC 2017] 钦妹的玩具商店参与者 2已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @mhj3kqcp
- 此快照首次捕获于
- 2025/11/03 20:09 4 个月前
- 此快照最后确认于
- 2025/11/03 20:09 4 个月前
如下代码会在#1的8000多行WA:
CPP#include<bits/stdc++.h>
using namespace std;
const int N=1010,M=40,Mod=1e8+7; int c[N],v[N],id[N],l[M],r[M],dp[M][M][N],dp2[N]; vector<pair<int,int> >p[N];
void solve() {
int n,m,q,sz; cin>>n>>m>>q,sz=sqrt(n);
for(int i=1;i<=n;i++) {
cin>>c[i],id[i]=i/sz+1;
if(!l[id[i]]) l[id[i]]=i;
r[id[i]]=i;
}
for(int i=1;i<=n;i++) cin>>v[i];
for(int i=1;i<=n;i++) {
int t; cin>>t;
for(int j=1;j<=t;t-=j,j<<=1) p[i].push_back({c[i]*j,v[i]*j});
if(t) p[i].push_back({c[i]*t,v[i]*t});
}
for(int i=0;i<=id[n];i++) {
if(i) {
for(int j=0;j<=m;j++) dp[i][id[n]+1][j]=dp[i-1][id[n]+1][j];
for(int j=l[i];j<=r[i];j++)
for(auto k:p[j])
for(int l=m;l>=k.first;l--) dp[i][id[n]+1][l]=max(dp[i][id[n]+1][l],dp[i][id[n]+1][l-k.first]+k.second);
}
for(int j=id[n];j>i;j--) {
for(int k=0;k<=m;k++) dp[i][j][k]=dp[i][j+1][k];
for(int k=l[j];k<=r[j];k++)
for(auto l:p[k])
for(int o=m;o>=l.first;o--) dp[i][j][o]=max(dp[i][j][o],dp[i][j][o-l.first]+l.second);
}
}
int lst=0;
while(q--) {
int x,y,L,R; cin>>x>>y;
L=min((x+lst-1)%n+1,(y+lst-1)%n+1),R=max((x+lst-1)%n+1,(y+lst-1)%n+1);
for(int i=0;i<=m;i++) dp2[i]=dp[id[L]-1][id[R]+1][i];
for(int i=l[id[L]];i<L;i++)
for(auto j:p[i])
for(int k=m;k>=j.first;k--) dp2[k]=max(dp2[k],dp2[k-j.first]+j.second);
for(int i=R+1;i<=r[id[R]];i++)
for(auto j:p[i])
for(int k=m;k>=j.first;k--) dp2[k]=max(dp2[k],dp2[k-j.first]+j.second);
int ans1=0,ans2=0;
for(int i=1;i<=m;i++) (ans1+=dp2[i])%=Mod,ans2^=dp2[i];
cout<<ans1<<' '<<ans2<<'\n',lst=ans1;
}
for(int i=1;i<=n;i++) p[i].clear();
for(int i=1;i<=id[n];i++) l[i]=0;
for(int i=0;i<=id[n];i++)
for(int j=i+1;j<=id[n]+1;j++)
for(int k=0;k<=m;k++) dp[i][j][k]=0;
}
int main() {
ios::sync_with_stdio(false),cin.tie(nullptr);
int t; cin>>t;
while(t--) solve();
return 0;
}
但只要在第49行清空 的时候顺带清空 就行了(, 为块的做右端点)就可以 AC。
但理论上 每次会在第 行被赋值,从而无需清空。那为什么还要清空呢?
回复
共 3 条回复,欢迎继续交流。
正在加载回复...