64 pts 求
查看原帖
64 pts 求
766675
da_ke楼主2024/10/14 23:17
#include <bits/stdc++.h>

#define int long long
#define rep(i,l,r) for(int i=(l);i<=(r);i++)
#define fdn(i,r,l) for(int i=(r);i>=(l);i--)
#define pii pair<int,int>
using namespace std;

typedef long long ll;
typedef double db;
typedef __int128 i128;

std::mt19937 rnd(std::chrono::steady_clock::now().time_since_epoch().count());
std::mt19937_64 rnd64(std::chrono::steady_clock::now().time_since_epoch().count());

void solve()
{
    string s;
    cin>>s;
    int n=s.size();s=' '+s;
    vector<int> N(n+1,0),cnt(11,0),v(11,0);
    rep(i,1,9) cin>>v[i];
    rep(i,1,n) N[i]=s[i]-'0',cnt[N[i]]++;
    ll ans=1ll<<59;
    rep(i,1,1e5)
    {
        vector<int> tcnt(11,0),acnt(11,0);
        int ti=i;
        while(ti) tcnt[ti%10]++,ti/=10;
        if(tcnt[0]) continue;
        bool fg=0;
        rep(j,1,9) 
            if(tcnt[j]>cnt[j]) fg=1;
            else acnt[j]=cnt[j]-tcnt[j];
        if(fg) continue;
        ll tans=i;
        rep(j,1,9) tans+=v[j]*acnt[j];
        ans=min(ans,tans);
    }
    ll tans=0;
    rep(i,1,9) tans+=v[i]*cnt[i];
    ans=min(ans,tans);
    cout<<ans<<endl;
}

signed main()
{
#ifndef ONLINE_JUDGE
    freopen("in.in","r",stdin);
    freopen("out.out","w",stdout);
#endif
    ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
    int X,T;
    cin>>X>>T;
    while(T--) solve();
}
2024/10/14 23:17
加载中...