きろく

特筆すべき記録のまとめ

yukicoder:No.821 Making Integers

問題

yukicoder.me

解法

操作を行った後の数列 A の和が最も大きくなるのは,1 回も操作を行わないときになる(つまり (1, 2, ... , N)).この和を max ( = N * (N + 1) / 2) とおく.また,操作を行った後の A の和が最も小さくなるのは,A のうち大きい数から 1 回ずつ操作を行ったときになる.この和を min ( = (N - K) * (N - K + 1) - max) とおく.このとき,操作を行った整数(すなわち,負になった整数)が max から引く数の和は必ず 2 の倍数になる.なぜならば,ある整数の和 m のそれぞれを負にしたとき,max から引く数は 2m となるから.また,m は任意の K 個以下を選んだ時の和の値を取るから,答えは min, min + 2, min + 4, .. , max の (max - min) / 2 + 1 個.O(1).

解答

yukicoder.me

f:id:babcs2035:20190427203235p:plain