社区讨论
求砍掉0.05ms
P5972[PA 2019] Desant参与者 6已保存回复 14
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 14 条
- 当前快照
- 1 份
- 快照标识符
- @mhjkp0oc
- 此快照首次捕获于
- 2025/11/04 04:08 4 个月前
- 此快照最后确认于
- 2025/11/04 06:31 4 个月前
/dk😭
CPP#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define fir first
#define sec second
#define pii pair<int,ll>
const int M=(1<<22),P=47;
struct HashMap{
pair<int,ll>vals[M];
vector<int>havs;
vector<int>act[M];
int head[M],nxt[M],tot;
int size(){return tot;}
void clear(){
for(int i=1;i<=tot;i++)nxt[i]=0,vector<int>().swap(act[i]);
for(int i:havs)head[i]=0;
vector<int>().swap(havs),tot=0;
}
void Ins(vector<int>&A,pii val){
int res=0;
for(int x:A)res=(((res*P)+x+1)&(M-1));
int p=head[res];
if(!p)p=++tot,act[p]=A,vals[p]=val,havs.emplace_back(res),head[res]=p;
else{
while(act[p]!=A&&p)p=nxt[p];
if(!p)p=++tot,act[p]=A,vals[p]=val,nxt[p]=head[res],head[res]=p;
else{
if(vals[p].fir==val.fir)vals[p].sec+=val.sec;
else if(vals[p].fir>val.fir)vals[p]=val;
}
}
}
};
const int N=45;
int n,a[N];
HashMap dp[2];
pii ans[N];
signed main(){
ios::sync_with_stdio(0),cin.tie(0);
cin>>n;for(int i=1;i<=n;i++) cin>>a[i];
vector<int> c(n+1,0);dp[0].Ins(c,{0,1});
for(int i=1;i<=n;i++){
dp[i&1].clear();
vector<int> b;for(int j=i;j<=n;j++) b.push_back(a[j]);
sort(b.begin(),b.end());int p=0;
for(int j=0;j<b.size();j++) if(b[j]==a[i]){p=j;break;}
for(int _=1;_<=dp[(i-1)&1].tot;_++){
auto A=dp[(i-1)&1].vals[_];int w=A.fir;ll v=A.sec;
auto B=dp[(i-1)&1].act[_];int nw=0;
for(int k=p+1;k<B.size();k++) nw+=B[k];
int cnt=B[p]+B[p+1];B.erase(B.begin()+p);
B[p]=cnt;dp[i&1].Ins(B,{w,v});
B[p]=cnt+1;w+=nw;dp[i&1].Ins(B,{w,v});
}
}
for(int i=1;i<=dp[n&1].tot;i++){
auto A=dp[n&1].vals[i];
auto B=dp[n&1].act[i];
ans[B[0]]=A;
}
for(int i=1;i<=n;i++) cout<<ans[i].fir<<' '<<ans[i].sec<<'\n';
return 0;
}
回复
共 14 条回复,欢迎继续交流。
正在加载回复...