第二题竟然跟我们学校出的题目撞了!!!!!
先看牛客题目(见上)
再看我们的题目:
修改数字(number)
问题描述:
Jack在黑板上写了一个正整数,数字和不低于k。John修改了其中一些数字(没有修改整数长度),这个正整数变成了n,现在计算John最少修改了几个数字。
输入格式:
第一行为正整数t(≤5),表示数据组数;每组数据中,第一行为正整数k(≤106),第二行为正整数n,n不超过105位。
输出格式:
对于每组数据,输出最少修改数。
输入样例
2
3
11
3
99
输出样例
1
0
其实牛客题比模拟赛题还简单些,不需要考虑字符串问题,只需要将数字排个序,如果数字大于等于m,则直接输出零,否则从第一个数开始,加上9-a[i],直到大于等于m为止。
代码如下:
#include<bits/stdc++.h> using namespace std; int n,m,a[1000005],ans,i; void in(int &s){ char c=getchar(); while (c<'0' || c>'9') c=getchar(); for (s=0; c>='0' && c<='9'; c=getchar()) s=s*10+c-'0'; }//快读模板,推荐复制粘贴 int main(){ in(n);in(m); for(i = 1;i <= n;i++){ in(a[i]);ans += a[i];//统计数字总和 } if(ans >= m){//特判 cout << 0;return 0; } sort(a+1,a+n+1);//排序 for(int i = 1;i <= n;i++){ ans += 9-a[i];//因为是最少,所以把每个数都变成9,总和就会加上9-a[i] if(ans >= m){//判定 cout << i;break; } } return 0;//AC! }