包神喜欢十分巨大的数字 。有一天,他随手写了一个很大的数字n,但是热爱做题的包神很快把它想成了一个题目,
他希望这个数字在不改变数字位数的情况下,尽可能少的改变几位,让它每一位的数字加和不小于k。这对包神
实在太简单了,他把问题留给了你!
Input第一行包含一个整数 k (1 ≤ k ≤ 109).
第二行包含一个整数 n (1 ≤ n < 10100000).
数据保证n没有前导0,同时数据保证存在答案。
Print the minimum number of digits in which the initial number and n can differ.
Input
3 11
Output
1
Input
3 99
Output
0
在第一个样例中,数字可以改为 12.所以更改了1位
在第二个样例中,每位之和已经大于 k. 不需要再改变,所以更改后的数字为 n.
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int main()
{
char a[100000];
int b[100000];
int i,k,p,q,l,t;
while(scanf("%d %s",&k,a)!=EOF)
{
l = strlen(a);
int sum = 0;
for (i=0;i<l;i++)
{
b[i] = a[i] - '0';
sum+=b[i];
}
sort(b,b+l);
if (sum>=k)
printf("0\n");
else
{
p = q = t = 0;
p = k - sum;
while (q<p)
{
q += 9-b[t];
t++;
}
printf("%d\n",t);
}
}
return 0;
}
反思:oj提交超时不一定是数组范围开大了,开小了也会造成超时。