CF1263B PIN Codes
题目思路
由于 \(2 \le n \le 10\),而每个数位只有 \(0\) 到 \(9\) 共 \(10\) 种可能,
所以这道水题我们只需要改变固定的一位的数值即可。
我的代码用map来判重,如果字符串重复出现,则将第 \(0\) 位改成 \(0\) 到 \(9\) 中的数字,直到新字符串是第一次出现。
数据范围友好,枚举可以过。
最后保留字符串的形式输出即可。
AC Code
#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main(){
ios::sync_with_stdio(0),cin.tie(0);
int t;
string s[25];
cin>>t;
while(t--){
int n;cin>>n;
map<string,int>mp;
for(int i=1;i<=n;i++) cin>>s[i],mp[s[i]]++;
int cnt=0;//累加有几个需要更改
for(int i=1;i<=n;i++){
if(mp[s[i]]==1) continue;//只出现一次
cnt++;
mp[s[i]]--;
for(int j=0;j<=9;j++){
s[i][0]=j+'0';//枚举更改
if(mp[s[i]]==0){
mp[s[i]]++;
break;
}
}
}
cout<<cnt<<"\n";
for(int i=1;i<=n;i++) cout<<s[i]<<"\n";
}
return 0;
}

浙公网安备 33010602011771号