WA1~9求调
查看原帖
WA1~9求调
690320
MoGuYun_12楼主2024/10/15 00:45
#include <bits/stdc++.h>

using namespace std;
#define N 100005
typedef long long ll;

string k;
ll cnt[10],mp[10],s[10],ten[10];
set <ll> pos[10];
ll v[11],a[N],ans=1e18;

void check(int a,int b,int c,int d,int e){
	int t=0;
	for(int i=1;i<=9;i++) mp[i]=s[i]=0; 
	if(a) mp[++t]=a;
	if(b) mp[++t]=b;
	if(c) mp[++t]=c;
	if(d) mp[++t]=d;
	if(e) mp[++t]=e;
	for(int i=1;i<=t;i++) s[mp[i]]++;
	for(int i=1;i<=9;i++) 
		if(s[i]>cnt[i]) return;
	int pre=0;
	for(int i=1;i<=t;i++){
		if(pre> *pos[mp[i]].rbegin()) return;
		pre= *pos[mp[i]].upper_bound(pre);
	}
	ll num=0,sum=0;
	for(int i=1;i<=t;i++) num+=mp[i]*ten[i];
	for(int i=1;i<=9;i++) sum+=v[i]*(cnt[i]-s[i]);
	ans=min(ans,num+sum);
}

int main()
{
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int c; cin>>c;
	int T; cin>>T;
	ten[1]=1;
	for(int i=2;i<=6;i++) ten[i]=10*ten[i-1];
	while(T--){
		cin>>k;
		int n=k.size(); k=" "+k;
		ans=1e18;
		for(int i=1;i<=9;i++) cnt[i]=0,pos[i].clear();
		for(int i=1;i<=n;i++) a[i]=0;
		for(int i=1;i<=n;i++){
			int t=k[i]-'0';
			a[i]=t;
			cnt[t]++,pos[t].insert(i);
		}
		for(int i=1;i<=9;i++) cin>>v[i];
		for(int a=0;a<=9;a++)
			for(int b=0;b<=9;b++)
				for(int c=0;c<=9;c++)
					for(int d=0;d<=9;d++)
						for(int e=0;e<=9;e++)
							check(a,b,c,d,e);
		cout<<ans<<endl;
	}	
	return 0;
}
2024/10/15 00:45
加载中...