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;
} 
posted @ 2025-05-19 21:16  深申  阅读(12)  评论(0)    收藏  举报