题目链接https://ac.nowcoder.com/acm/contest/56458
A
思路: 从后往前到一个不为零的数,计算让其等于10的数
#include<bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
while (n--) {
char b[10000];
char a[10000];
getchar();
scanf("%s", a);
for (int i = strlen(a) - 1, j = 0; i >= 0; i--) {
if (a[i] == '0')
b[j++] = '0';
else {
b[j++] = (char)(10 - (int)(a[i] - '0')+'0');
b[j] = '\0';
break;
}
}
for (int i = strlen(b) - 1; i >= 0; i--)
printf("%c", b[i]);
printf("\n");
}
}
B
思路:判断是不是只有两个不一样的,或者存在相同的比如“aab”和“aab”"aa""aa".
#include<bits/stdc++.h>
using namespace std;
char a[2000000];
char b[2000000];
int main() {
int n;
cin>>n;
getchar();
scanf("%s",a);
getchar;
scanf("%s",b);
int c=0;
int y[500]={0},y1[500]={0};
for(int i=0,j=0;i<n;i++,j++){
if(a[i]!=b[i])
c++;
y1[a[i]]++;
y1[b[i]]++;
y[a[i]]++;
y[b[i]]--;
}
int fl=0,kl=0,t=0;
for(int i=0;i<500;i++){
if(y1[i]>0)
kl++;
if(y1[i]>=4)
t=1;
}
for(int i=0;i<500;++i)
if(y[i]!=0){
fl=1;
break;
}
if((c==2&&fl==0)||kl==1||(c==0&&kl>=2&&t==1))
printf("YES");
else
printf("NO");
}
C
思路:kx<=m变形得k<=m/x,k为小于m的边界,m/(m/x+1)就是y的最小值m/(m/x)最大值
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
while(n--){
int m,x,y=0;
cin>>m>>x;
for(int i=m/(m/x+1);i<m/(m/x);i++)
y++;
cout<<y<<endl;
}
}