社区讨论

求砍掉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 条回复,欢迎继续交流。

正在加载回复...