P11188 「KDOI-10」商店砍价
  • 板块学术版
  • 楼主0tAp
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/15 19:40
  • 上次更新2024/10/15 20:02:46
查看原帖
P11188 「KDOI-10」商店砍价
758858
0tAp楼主2024/10/15 19:40
#include<algorithm>
#include<iostream>
#include<string.h>
#include<cstdio>
#include<vector>
#include<cmath>
#include<queue>
#include<map>
#include<set>
using namespace std;
#define int long long
#define repu(i,u) for(int i=(h[u]);i;i=(ne[i]))
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define dwn(i,a,b) for(int i=(a);i>=(b);i--)
#define xx return
const int N=1e6+10;

int c,T;
int v[10];
int cnt[10];
int ans=1e18;

struct A{
	int id[N];
}Num[15];

int va[10];
int idx[10];
void compute(int a,int b,int c,int d,int e)
{
	int now=0;
	rep(i,1,9)va[i]=idx[i]=0;
	if(a)va[++now]=a;
	if(b)va[++now]=b;
	if(c)va[++now]=c;
	if(d)va[++now]=d;
	if(e)va[++now]=e;
	if(!a&&!b&&!c&&!d&&!e)xx;
	rep(i,1,now)idx[va[i]]++;
	rep(i,1,9)if(idx[i]>cnt[i])xx;
	int the_end=0;
	rep(i,1,now)
	{
		if(the_end>=Num[va[i]].id[cnt[va[i]]])xx;
		the_end=upper_bound(Num[va[i]].id+1,Num[va[i]].id+1+cnt[va[i]],the_end)-Num[va[i]].id;
	}
	int pre=0,sum=0;
	rep(i,1,now)pre=va[i]+pre*10;
	rep(i,1,9)sum+=v[i]*(cnt[i]-idx[i]);
	ans=min(ans,pre+sum);
	xx;
}

void solve()
{
	ans=1e18;
	string s;
	cin>>s;
	int len=s.size();
	s=" "+s;
	rep(i,1,9)scanf("%lld",&v[i]);
	rep(i,1,9)cnt[i]=0;
	int k=len;
	rep(i,1,len)
	{
		int now=s[i]-'0';
		++cnt[now];
		Num[now].id[cnt[now]]=i;
	}
	rep(a,0,9)
	rep(b,0,9)
	rep(c,0,9)
	rep(d,0,9)
	rep(e,0,9){
		compute(a,b,c,d,e);
	}
	printf("%lld\n",ans);
	xx;
}

signed main()
{
	//freopen("bargain2.in","r",stdin);
	scanf("%lld%lld",&c,&T);
	while(T--)solve();
	xx 0;
}

1—9 wa 求调

2024/10/15 19:40
加载中...