Codeforces Round 884 (Div. 1 + Div. 2) D. Row Major

发布时间 2023-07-13 00:21:27作者: 突破铁皮

题目要求输出一个字符串,使用最少的字符种类,使得任意所有的i行j列中任意相邻的字符不同

首先相邻的肯定必须不同,i-1和i一定不同,其次观察可得,1和2不同,如果n%3==0的话,则1和2和3都不同,如此反复,直到n%i!=0,则i可以取和1相同然后,得到连续的最长长度为1~i

#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
#include <set>
#include <utility>
#include <vector>
#include <queue>
#include <map>
using namespace std;
const int N=1e6+10;
typedef long long ll;
int n,t;
void solve(){
	cin>>n;
	int num;
	for(int i=1;i<=n;i++){
		if(n%i!=0){
			num=i;
			break;
		}
	}
	for(int i=1;i<=n;i+=num){
		for(int j=0;j<num&&i+j<=n;j++){
			printf("%c",'a'+j);
		}
	}
	cout<<endl;
	
}
int main(){
	ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin>>t;
    while(t--){
    solve();
}
}