WA on 1/2/10/11/12 求条
查看原帖
WA on 1/2/10/11/12 求条
659460
SunsetVoice楼主2024/10/13 18:50

如此成绩,如何 CSP?

#include<bits/stdc++.h>
#define int long long
#define endl "\n"
using namespace std;
int c,a[20] = {0},cnt[20] = {0},n;
vector<int>pos[20];
int val(int i,int j,int k,int l,int m){
	return i*10000+j*1000+k*100+l*10+m-a[i]-a[j]-a[k]-a[l]-a[m];
}
bool check(int a,int b,int c,int d,int e,bool pr = 0){
	if(pr)cout<<"check:"<<a<<b<<c<<d<<e<<endl;
	if(a==0)return check(b,c,d,e,-1,pr);
	//if(pos[a].size()==0 or pos[b].size()==0 or pos[c].size()==0 or pos[d].size()==0 or pos[e].size()==0)return false;
	if(pos[a].size()==0)return false;
	int dpos = pos[a][0];
	if(pr)cout<<dpos<<endl;
	dpos = upper_bound(pos[b].begin(),pos[b].end(),dpos)-pos[b].begin();
	if(pr)cout<<dpos<<endl;
	if(dpos==pos[b].end()-pos[b].begin())return false;
	dpos = pos[b][dpos];
	if(c==-1)return true;
	dpos = upper_bound(pos[c].begin(),pos[c].end(),dpos)-pos[c].begin();
	if(pr)cout<<dpos<<endl;
	if(dpos==pos[c].end()-pos[c].begin())return false;
	dpos = pos[c][dpos];
	if(d==-1)return true;
	dpos = upper_bound(pos[d].begin(),pos[d].end(),dpos)-pos[d].begin();
	if(pr)cout<<dpos<<endl; 
	if(dpos==pos[d].end()-pos[d].begin())return false;
	dpos = pos[d][dpos];
	if(e==-1)return true;
	dpos = upper_bound(pos[e].begin(),pos[e].end(),dpos)-pos[e].begin();
	if(pr)cout<<dpos<<endl;
	if(dpos==pos[e].end()-pos[e].begin())return false;
	return true;
}
signed main(){
	//freopen("bargain5.in","r",stdin);
	cin.tie();
	cout.tie();
	int T;
	cin>>c>>T;
	while(T--){
		int ans = 0;
		string s;
		cin>>s;
		n = s.length();
		for(int i = 1;i<=9;i++){
			while(pos[i].size()!=0)pos[i].pop_back();
			cin>>a[i];
			cnt[i] = 0;
		}
		//cout<<n<<endl;
		for(int i = 0;i<n;i++){
			cnt[s[i]-'0']++;
			pos[s[i]-'0'].push_back(i);
		}
		for(int i = 1;i<=9;i++){
			//cout<<pos[i]<<endl;
			ans+=cnt[i]*a[i];
		}
		//cout<<endl;
		int ma = 0;
		for(int i = 0;i<=9;i++){
			for(int j = 0;j<=9;j++){
				if(i!=0 and j==0)continue;
				for(int k = 0;k<=9;k++){
					if(j!=0 and k==0)continue;
					for(int l = 0;l<=9;l++){
						if(k!=0 and l==0)continue;
						for(int m = 1;m<=9;m++){
							if(i==0 and j==0 and k==0 and l==0){
								ma = min(m-a[m],ma);
							}
							if(l!=0 and m==0)continue;
							if(!check(i,j,k,l,m))continue;
							
							cout<<i<<j<<k<<l<<m<<" "<<ans+val(i,j,k,l,m)<<endl;
							//check(i,j,k,l,m,1);
							ma = min(val(i,j,k,l,m),ma);
						}
					}
				}
			}
		}
		//check(0,0,0,1,2,1);
		//cout<<ans<<" "<<ma<<endl;
		cout<<ans+ma<<endl;
	}
	return 0;
}
/*
0
1
993933939
1 1 99999 1 1 1 1 1 10000
*/
2024/10/13 18:50
加载中...