其他分享
首页 > 其他分享> > C. Banknotes(思维

C. Banknotes(思维

作者:互联网

添加链接描述
题意是用k张面额表示最小的不可能表示的数,也就是k+1张最小的数
可以发现用10^(a[i+1]-a[i])-1从小到大的面额枚举

#include<bits/stdc++.h>
using namespace std;
const int N=11;
int num[]={1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000};
int arr[N];
typedef long long ll;
ll solve(ll n,ll k){
    k++;
    ll sum=0;
    for(int i=1;i<=n;i++){
            if(i==n){
                sum+=num[arr[i]]*k;
            }
            else {
                int x=num[arr[i+1]]/num[arr[i]]-1;
                if(k>x){
                    k-=x;
                    sum+=x*num[arr[i]];
                }
                else {
                    sum+=k*num[arr[i]];
                    return sum;
                }
            }
        }
        return sum;
}
int main(){
    int T;
    cin>>T;
    while(T--){
        int n,k;
        cin>>n>>k;
        for(int i=1;i<=n;i++){
            cin>>arr[i];
        }
        cout<<solve(n,k)<<endl;

    }


    return 0;   
}

标签:思维,arr,int,sum,cin,Banknotes,num,ll
来源: https://blog.csdn.net/Minelois/article/details/121319876