package main import . "fmt" import . "sort" func main() { var n,a,b,c,d,e,f int Scan(&n,&a,&b,&c,&d,&e,&f) r1 := Search(n/c+2, func(r int) bool { return (r+1)*b*a + b*c*r*(r+1)/2 >= n }) gr1 := (r1+1)*b*a + b*c*r1*(r1+1)/2 t1 := Search(b+2, func(t int) bool { k := r1*b + t hk := (k-r1*b) * (a + b*r1) return gr1 - (b*a + b*c*r1) + hk >= n }) k1 := r1*b + t1 println(k1) r2 := Search(n/f+2, func(r int) bool { return (r+1)*e*d + e*f*r*(r+1)/2 >= n }) gr2 := (r2+1)*e*d + e*f*r2*(r2+1)/2 t2 := Search(e+2, func(t int) bool { k := r2*e + t hk := (k-r2*e) * (d + e*r2) return gr2 - (e*d + e*f*r2) + hk >= n }) k2 := r2*e + t2 println(k2) switch { case k1 < k2: Println("KCPC") case k1 == k2: Println("Same") case k1 > k2: Println("KUPC") } } /* 考察 え、むず f(K) = Σ{i=1..K}(x + z * floor((i - 1)/ y)) サンプル1からすると y日間 同じ日給が続くぽい y日ごとにまとめると g(R) = Σ{p=0..R}(y*x + y*z*p) = (R+1)*y*x + y*z*Σ{p=0..R}(p) = (R+1)*y*x + y*z*R*(R+1)/2 g(R)は単調増加なので g(R) >= N で Rを二分探索 R = floor((rmin-1)/y) = floor((K-1)/y) = floor((rmax-1)/y) なので rmin = R * y f(K) = g(R) - (y*x + y*z*R) + h(K) h(K) = Σ{i=rmin..K}(x + z * R) = (K-rmin) * (x + z * R) からf(K) >= N で K を二分探索 */