64pts求调
查看原帖
64pts求调
337131
_Nancy_楼主2024/10/14 18:34

模拟做的,但是不知道怎么判断数位的出现顺序

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<string>
#include<stack>
#include<queue>
#include<vector>
using namespace std;
#define MAXN 1000010
#define MAXM 3000010
#define R(x) x=read()
#define W(x) write(x)
#define int long long
#define INF 0x3f3f3f3f
#define lc x<<1
#define rc x<<1|1
inline int read()
{
	int x,y;
	char c=getchar();
	x=0,y=1;
	while(c<'0'||c>'9') {if(c=='-') y=-1;c=getchar();}
	while(c>='0'&&c<='9') {x=(x<<3)+(x<<1)+(c^'0');c=getchar();}
	return x*y;
}
inline void write(int x)
{
	if(x<0) {putchar('-');x=-x;}
	if(x>9) write(x/10);
	putchar(x%10+'0');
}
int tot[MAXN]={0};
int dig[MAXN];
signed main()
{
//	freopen("bargain2.in","r",stdin);
//	freopen("bargain.out","w",stdout);
	int c;
	R(c);
	int t;
	R(t);
	while(t--)
	{
		string s;
		cin>>s;
		int lens=s.size();
		s=" "+s;
		for(int i=1;i<=9;i++)
			tot[i]=0;
		for(int i=1;i<=9;i++)
			R(dig[i]);
		dig[0]=0;
		for(int i=1;i<=lens;i++)
			tot[s[i]-'0']++;
		tot[0]=6;
		int ans=0,now=0;
		int minn;
		for(int i=1;i<=lens;i++)
			ans+=dig[s[i]-'0'];
		minn=ans;
		for(int i=0;i<=9;i++)
			for(int j=0;j<=9;j++)
				for(int k=0;k<=9;k++)
					for(int l=0;l<=9;l++)
						for(int m=0;m<=9;m++)
						{
							now=i*10000+j*1000+k*100+l*10+m;
							tot[i]--;tot[j]--;tot[k]--;tot[l]--;tot[m]--;
							if(tot[i]>=0&&tot[j]>=0&&tot[k]>=0&&tot[l]>=0&&tot[m]>=0)
								now+=ans-dig[i]-dig[j]-dig[k]-dig[l]-dig[m];
							else 
							{
								tot[i]++;tot[j]++;tot[k]++;tot[l]++;tot[m]++;
								continue;
							}
							tot[i]++;tot[j]++;tot[k]++;tot[l]++;tot[m]++;
							minn=min(now,minn);
						}
		cout<<minn<<endl;
	}
	return 0;
} 
2024/10/14 18:34
加载中...