個増加させることができる。個まで増加する文字列を1刻みで調節できる。場合を例にすると、下のように文字を追加する。よって制約を満たす文字列を作ることができる。Cこういう構築系は配点がそこそこ高くても思いつき次第でACを狙える時があるので、レート上昇が滞っている今は解ける問題を時間中に貪欲に探していく戦略が大事かも。contestのwriterをやりました。100人ほど参加してくださって、いろいろwriterとして得られるものがあったので書き残しておきます。解説はそれぞれの問題の解説タブに書いてあるので、ここでは解説や提出コードは書きません。yukicoder簡単な問題、でも少し考察が必要という願いのもとで作りました。結局多倍長整数が扱えたらやるだけ、という問題になってしまいました。多倍長整数が使えなくても簡単な考察で正解することができますし、大きい数の組なら積が大きいというアバウトな考察でも正解することができます。コンテスト参加者の9割以上が正解していました。yukicoder和&積シリーズで簡単な問題がもう一問作れないかと思って産まれた問題。最大公約数なら計算しても良いよ、という願いのもとで作りましたが、予想通り提出は多倍長祭りでした(C++だと__int128という抜け道があるのでほぼすべての言語でやるだけができる)。コンテスト終了後であっても64bit以上の整数型を使わず提出してくださった方、ありがとうございます。No.441とNo.442はyukicoderだから出せるかなというお楽しみ(?)問題でした。yukicoderコンテスト中想像以上に荒れた問題でした。荒れた原因としては、入力の制約に従っていないケースがあったり、乱択解やnext_permutation解を通してしまったテストケースの質の悪さが大きかったです。試す人なんていないでしょうと思っていた(怠慢)のですが、そこはrandom_shuffleを使ったりしてうまくやっている人が多くて感心していました。想像以上に難しく感じている人が多くてびっくりしました(当初は問題案は10分くらいで作れたし、考察もそこそこだからと★2に設定していました)。下二桁の入れ替えで起こる差の最大公約数だけ考えれば、任意の桁の入れ替えで起こる差の最大公約数を考えていることになる。この記事を書く直前に乱択解を撃墜するケースを追加してリジャッジをかけましたが、結局コンテスト中に正しい提出をしている方は8人でした。rateがとても低かったので、かなり不安でした(問題の不備やwriter嘘解法説など)。問題を作る以上にテストケース作りが大変でした...ちゃんとしたテストケースを用意するにはいろいろな解法に触れている経験が必要ですね。自分の問題をいろいろな解法(嘘解法含む)で解かれているのは提出を見ていてとても勉強になりました。初writerにしてNo.443の評判がかなり良かったのはとても恵まれていたと思います(TLの感想は大体読んでいます)。面白い数学的な性質を利用した問題を作りたいと思います。AnticubeAtCoder概ね解説と方法は同じですが、自分の方法は少しアプローチが違うので書くことにしました。この中から出来る限り多くの整数を選んで、どの2つの要素の積も立方数にならないようにしたい。最大何個まで選べるか。立方数になるという性質を考えます。同時に選べないことがわかります。ここで、数列の各要素を3乗数で割り切れなくなるまで割ることを考えます。同時に選べない数字は一つしか存在しません。一意に定まるからです。一意に定めることができ、この2つの整数はペアとして考えることができます。2以上の数字はかならずそれ自身と異なるペアを持ちますが、1のペアは1なので、特別に処理する必要があります。3乗数で割った数列のなかで同じ数字はひとまとめにして個数で管理することにすると、次の方針で答えを出すことができます。ペアのときは、個数が多い方を選び、答えに加算する。特例として、数列に1が存在するときは、他のどの1ともペアを作ってしまうので、答えに加算するのは1である。)の3乗で割ると間に合います。(素数→整数としてしまうと、TLEします)次に、各要素のペアを求める部分です。