これはすんなり。
https://codeforces.com/contest/1844/problem/D
問題
整数Nが与えられる。
以下を満たす文字列Sを構成せよ。
- SはN文字のアルファベット小文字からなる
- SをR行C列(N=R*C)に折りたたんで表示したとき、上下左右に隣接する文字は一致してはならない。
解法
Nの約数をdとすると、Sをd文字のループで構築すると条件に反する。
そこで、Nの約数でない整数eを探し、Sをe種類の文字のループで構成しよう。
int T,N; void solve() { int i,j,k,l,r,x,y; string s; cin>>T; while(T--) { cin>>N; if(N==1) { cout<<"a"<<endl; continue; } set<int> NG; for(x=2;x<N;x++) if(N%x==0) { NG.insert(N/x); NG.insert(x); } for(x=2;x<=100;x++) if(NG.count(x)==0) { FOR(i,N) cout<<(char)('a'+(i%x)); cout<<endl; break; } } }
まとめ
Div1+2混合とはいえ、1500ptの割に簡単な気がする。