Codeforces 898E Squares and not squares
題目大意
給定 $n$($n$ 是偶數(shù),$2\le n\le 2\times 10^{5}$)個(gè)非負(fù)整數(shù) $a_1,\dots, a_n$($a_i\le 10^9$)。
要求將其中 $n/2$ 個(gè)數(shù)變成平方數(shù),另外 $n/2$ 個(gè)數(shù)變成非平方數(shù),變化后的數(shù)必須仍是非負(fù)整數(shù)。
將 $x$ 變成 $x'$ 的代價(jià)為 $|x-x'|$ 。
求最小的總代價(jià)。
比賽時(shí)我的思路
用 $c_{i,0}$ 表示將 $a_i$ 變成平方數(shù)的最小代價(jià),$c_{i,1}$ 表示將 $a_i$ 變成非平方數(shù)的最小代價(jià),不難求出這兩個(gè)值。
那么問(wèn)題轉(zhuǎn)化為
從 $c_{1,0}, c_{2,0}, \dots, c_{n,0}$ 和 $c_{1,1}, c_{2,1}, \dots, c_{n,1}$ 中各取出 $n/2$ 個(gè)數(shù),限制條件是:$c_{i,0}$ 和 $c_{i,1}$ 不能都取。
求取出的數(shù)的最小和。
比賽時(shí)我想到這里就進(jìn)展不下去了。
轉(zhuǎn)化后的問(wèn)題的解法
對(duì)于任意一個(gè)合法的取數(shù)方案,如果不是最優(yōu)解,則必然存在 $i, j$ 滿足:
第二個(gè)條件可化為
$c_{i,1} - c_{i,0} < c_{j,1} - c_{j,0}$
這樣便得出這個(gè)問(wèn)題的解法:
將下標(biāo) $1, 2,\dots,i,\dots, n$ 按 $c_{i,1} - c_{i,0} $ 從小到大排序,對(duì)前 $n/2$ 個(gè)下標(biāo)取 $c_{i,1}$,對(duì)后 $n/2$ 個(gè)下標(biāo)取 $c_{i,0}$ 。
題解上解法
統(tǒng)計(jì)輸入的 $n$ 個(gè)數(shù)中平方數(shù)和非平方數(shù)的個(gè)數(shù),分別記做 $c_0, c_1$。
若 $c_0 = c_1$ 則無(wú)需改變。
若 $c_0 > c_1$ 則需要把 $(c_0 - c_1)/2$ 個(gè)平方數(shù)變成非平方數(shù)。對(duì)于非零的平方數(shù),加 1 即可,零則須加 2 。所以,優(yōu)先改變非零的平方數(shù)。
若 $c_0 < c_1$ 則需把 $(c_0 - c_1)/2 $ 個(gè)非平方數(shù)變成平方數(shù)。
轉(zhuǎn)載于:https://www.cnblogs.com/Patt/p/8052993.html
總結(jié)
以上是生活随笔為你收集整理的Codeforces 898E Squares and not squares的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 高铁晚点遇到没?全国多个铁路枢纽被曝大面
- 下一篇: tomcat源码阅读之StandardH