为啥wa1,2
查看原帖
为啥wa1,2
1111160
starish楼主2024/10/13 18:38
#include<bits/stdc++.h>
using namespace std;
#define int long long
int c=0,t,v[100005],ans=0x3f3f3f,sum,a[100005],mp[11][100005],lenn[11],sz;
int vis[1000000];
string s;
void dfs(int x,int num){
	if(num>600000)return ;
	if(vis[num])return ;
	vis[num]=1;
	for(int i=1;i<=9;i++){
		if(mp[i][lenn[i]]>x){
			int l=1,r=lenn[i],mid=(l+r)/2;
			while(l<r){
				mid=(l+r)/2;
				if(mp[i][mid]>x)r=mid;
				else l=mid+1; 
			}
			dfs(mp[i][l],num*10+i);
		}
	}
}
signed main(){
	cin>>c;
	cin>>t;
	while(t--){
		cin>>s;
		sz=s.size();
		ans=1e15+6;
		sum=0;
		memset(vis,0,sizeof vis);
		memset(mp,0,sizeof mp);
		memset(lenn,0,sizeof lenn);
		for(int i=1;i<=9;i++)cin>>v[i];
		for(int i=1;i<=sz;i++){
			a[i]=s[i-1]-'0';
			sum+=v[a[i]];
			mp[a[i]][++lenn[a[i]]]=i;
//			cout<<mp[a[i]][lenn[a[i]]]<<"\n";
		}
		dfs(0,0);
		for(int i=1;i<=600000;i++){
			if(vis[i]){
//				cout<<i<<"\n";
				int sum2=sum,j=i;
				while(j){
					sum2-=v[j%10];
					j/=10;
				}
				sum2+=i;
				ans=min(sum2,ans);
			}
		}
		cout<<ans<<"\n";
	}
	
	return 0;
} 
2024/10/13 18:38
加载中...