kmjp's blog

競技プログラミング参加記です

yukicoder : No.2198 Concon Substrings (COuNt-CONstruct Version)

コードは短め。
https://yukicoder.me/problems/no/2198

問題

非負整数Mが与えられる。
c,o,nで構成される60000文字以下の文字列Sで、連続でなくてもよい部分文字列として"con"をちょうどM通り持つものを構成せよ。

解法

Mを4桁ずつ区切ったとき、上からa,b,cとする。

(a個の'c')+(10000個のo)+(9998個のn)+(b個のc)+(9999個の'o')+(c個の'c')+"on"
とすると、a*10^8+b*10^4+c個のconが取れる。

ll M;

void solve() {
	int i,j,k,l,r,x,y; string s;
	
	cin>>M;
	ll a=M/100000000;
	ll b=M/10000%10000;
	ll c=M%10000;
	string S=string(a,'c')+string(10000,'o')+string(9998,'n')+string(b,'c')+string(9999,'o')+string(c,'c')+"on";
	cout<<S<<endl;
	
}

まとめ

色々な解法がありそう。