Xenous の精進記録

AtCoder関連他、学習したことの記録です。

ARC118 参加記録

  • ACの2完0ペナ 79分でした

A - Tax Included Price

最初からなかなかハードな問題だと思いました。

式から  O(1) で求められそうな感じはしますが、わからなかったので実験しました。具体的には、実際に消費税  t を固定して  1 円から順番に求めていき、スキップされたもの(税込み価格としては現れない正の整数の金額)を取りだして並べていきました。

そのあと、スキップされた値の差分を隣どうしとって行きます。そうすることで差分の周期性が見えてきます。 実験から、以下のような動きをしていることがわかりました。

  •  t が 100 の約数であるときは、差分の周期は 1 で全て値は同じになる。
  • そうでないときは、差分のループは長さ  t の数列で表せる。

これらから、 N を ループの長さ  t で割ったときの商と余りを駆使して、 N 番目の数字を  O(1) で計算することができます。

B - Village of M People

まず  a を 数列  A の各要素として、  \frac{Ma}{N} を求めます。このとき、小数ではなく整数で扱いたいので、商を  B として扱い、余りの列を別で持っておきます。

数列  B はこの時点では  \sum{B} = M を満たしていませんが、足りない部分を割り振ることによって数列  B を完成させます。 先ほど求めた余りの列の大きい順から割り振れば良くなります。余りは切り捨てたときの整数との距離のような値と解釈でき、余りが小さければ今  B として決めた値に近く、そうでないときは +1 した値の方が近くなります。

C - Coprime Set

以下の2つが成り立つような数列  A を作ります。

  • 全ての  i, j で、 i \neq j ならば  A_i \neq A_j かつ  \mbox{gcd}(A_i, A_j) \gt 1 が成り立つ ・・・①
  •  \mbox{gcd}(A_1, \cdots, A_N) = 1 が成り立つ・・・②

まず  A_i素数をもってくることができません。素数があれば ② を成り立たせるように作るのは簡単になりそうですが、①を成立させるには全てその素数の倍数でないといけません。そうすると結局②を成立させることができず、作れません。

また、4 などの 1種類の素数で構成された数字も使えません。これも、①を成立させるにはその一種類の素数の倍数である必要があり、②を満たせません。

そうしたときに、まず  N = 3 で考えてみます。素数を使うことはできませんが、ふたつの異なる素数の掛け算で構成された値を使ってみるのはどうでしょうか。例えば、小さい順に、6, 10, 15 を考えてみると、それぞれ①②を満たします。

そして、これら  2\times3, 2\times5, 3\times5 のどれかの倍数であれば、①②を満たしつつ数列を追加することができます。 追加する際に 10000 より大きくならないことに注意すれば、この問題を解くことができます。