Try   HackMD

yukicoder No.1122 Plane Tickets

https://yukicoder.me/problems/no/1122

コンテスト中の考察

線形計画問題を知っていますか?線形計画問題に見えたのでとりあえず線形計画っぽく書いてみます.

  • 種類 A, B, C の優待券を
    T1
    枚ずつ使う.
  • 種類 B, C, D の優待券を
    T2
    枚ずつ使う.
  • 種類 C, D, E の優待券を
    T3
    枚ずつ使う.
  • 種類 D, E, A の優待券を
    T4
    枚ずつ使う.
  • 種類 E, A, B の優待券を
    T5
    枚ずつ使う.

とすると,

maximizeT1+T2+T3+T4+T5(1)subject toT4+T5+T1a(2)T5+T1+T2b(3)T1+T2+T3c(4)T2+T3+T4d(5)T3+T4+T5e(6)Ti0

答えに単調性があって, 制約が

1015 なので決め打ち二分探索をする.

つまり,

T1+T2+T3+T4+T5=x のとき,
(1),(2),(3),(4),(5),(6)
を同時に達成できるかどうかを判定する関数をつくる.

変数 3 つの和は大変なので, どうにかして 1 つにしたい.
ここで

(1)+(3) をすると,
T1+T2+T3+T4+T5+T1a+cx+T1a+cT1a+cx

同様に,

T1a+cxT2b+dxT3c+exT4d+axT5e+bx

Ti は,
T1+T2+T3+T4+T5>x
にならない限りできるだけ大きくした方が良く, 多すぎた分は減らせるので,
T1=a+cxT2=b+dxT3=c+exT4=d+axT5=e+bx

と仮定(ただし多すぎた分は減らす).
(6)
を思い出すと条件は,
{0T10T20T30T40T5xT1+T2+T3+T4+T5

となる.

条件が整理できたっぽいのでこの6つを条件として判定する → AC

https://yukicoder.me/submissions/516402

もはや二分探索いらない

0T10a+cxxa+cxT1+T2+T3+T4+T5x(a+cx)+(b+dx)+(c+ex)+(d+ax)+(e+bx)6x2(a+b+c+d+e)x13(a+b+c+d+e)

のように整理をして, 条件は

{xa+cxb+dxc+exd+axe+bx13(a+b+c+d+e)

つまり, 答えは

min(a+c,b+d,c+e,d+a,e+b,a+b+c+d+e3)

https://yukicoder.me/submissions/516882

さて,

この考察怪しい.

ここで

(1)+(3) をすると,

とか言っているが,

(1)+(3)(1)(3) はいえない.

線形計画の領域の角のうち

O(1) で計算できるものを取り出しただけに見える.

しかし, ストレステストをしても落とせない.

どうやら, 条件の式の係数が全部 1 であるため, かなり領域の形がシンプルになって, 角がこれだけになると思われる.