交的有一个居然一直卡在case 10 不跑了???
题意有点难懂,就是说黑板上有一个数字其位数和不小于k,有一个人通过改变各个位把它改成了n,那么求这个数使得其位数和n各个位数不同的最小值,也就是说要让a和n各个位数不同的数量最小,而且这个a的位数和不小于k,就把n中小的位数去变成9就好了。
#include <iostream>
#include <string>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <stack>
#include <queue>
#define MAX 100005
#define mod 998244353ll
#define INF 0x3f3f3f3f
#define ll long long
using namespace std;
int a[10];
int main() {
freopen("a.txt", "r", stdin);
freopen("b.txt", "w", stdout);
int k, sum = 0;
string s;
cin >> k >> s;
for (int i = 0; s[i]; ++i) {
int t = s[i] - '0';
a[t]++;
sum += t;
if (sum >= k) break;
}
int c = 0;
if (sum >= k) {
cout << c << endl;
return 0;
}
for (int i = 0; i < 10; ++i) {
int t = 9 - i;
if (sum + a[i] * t >= k) {
c = c + (k - sum) / t;
if ((k - sum) % t != 0) {
c++;
}
break;
}
else {
sum += a[i] * t;
c += a[i];
}
}
cout << c << endl;
return 0;
}