codeforce898E Squares and not squares (round #451 div 2)
題目詢問將一組數變成一半為平方數,一半為非平方數 的最少步數。
初始化所有的平方值,注意要開到比1e9大的第一個數。
然後讀取,把所有值與其最近的平方數(lower_bound)之差push到一個優先佇列裡。
並統計平方數的個數S 和0的個數Z(因為0需要改變兩次才能到一個非平方數)。
然後根據S和Z判斷輸出,詳見程式碼。
#include <bits/stdc++.h> using namespace std ; typedef long long LL; typedef long long ll ; int arr[50000] ; int init(){ int n = 0 , i = 0; while(n * n <= 1e9){ arr[i ++] = n * n ; n ++ ; } arr[i++] = n * n ; return i ; } const int maxn = 200005 ; int s[maxn] ; priority_queue<int , vector<int> , greater<int> > pq ; int main(){ int len = init() ; int n , temp ; while(~ scanf("%d" , &n)){ while(!pq.empty()) pq.pop() ; int sqnum = 0 ,zeronum = 0 ; for(int i = 0 ; i < n ; i ++ ){ scanf("%d" , &s[i]) ; int t = upper_bound(arr , arr + len , s[i]) - arr ; //cout << arr[t - 1] << " " << arr[t] << endl ; if(s[i] == 0 ) zeronum ++ ; if(s[i] == arr[t-1] || s[i] == arr[t]) sqnum ++ ; else { temp = min(s[i] - arr[t-1] , arr[t] - s[i] ) ; //cout << temp << endl ; pq.push(temp ) ; } } if(sqnum <= n / 2){ int num = n / 2 - sqnum ; //cout << num << endl ; int temp ; ll ans = 0 ; for(int i = 1 ; i <= num ; i ++ ){ temp = pq.top() ; pq.pop() ; ans += (ll)temp ; } printf("%lld\n" , ans) ; }else{ if(zeronum <= n / 2) printf("%d\n" , sqnum - n / 2 ) ; else{ printf("%d\n" , zeronum - n / 2 + sqnum - n / 2) ; } } } return 0 ; }
相關推薦
codeforce898E Squares and not squares (round #451 div 2)
題目詢問將一組數變成一半為平方數,一半為非平方數 的最少步數。 初始化所有的平方值,注意要開到比1e9大的第一個數。 然後讀取,把所有值與其最近的平方數(lower_bound)之差push到一個優先佇列裡。 並統計平方數的個數S 和0的個數Z(因為0需要改變兩次才能到
Codeforces 1099 B. Squares and Segments-思維(Codeforces Round #530 (Div. 2))
index red decide flag header exist raw cin cond B. Squares and Segments time limit per test 1 second memory limit per
Codeforces 898E Squares and not squares
方案 def mar 最優解 time 偶數 轉化 問題 $1 題目大意 給定 $n$($n$ 是偶數,$2\le n\le 2\times 10^{5}$)個非負整數 $a_1,\dots, a_n$($a_i\le 10^9$)。 要求將其中 $n/2$ 個數變成平方數
A. The Fair Nut and Elevator (Codeforces Round #526 (Div. 2))
A. The Fair Nut and Elevator 好笨啊QAQ。 暴力列舉的題,連分類都不用。 從電梯初始位置到第一層、人到第一層、間隔的層數,往返路程。 #include <bits/stdc++.h> using namespace std; int
D. Ehab and another another xor problem(Codeforces Round #525 (Div. 2))(互動題)
傳送門 題意:這是個互動題,題意是這樣的,現在不知道a,b的值,但是有三種操作, 然後每次問完問題,也就是你輸出你的c和d,互動系統會給出相應的值(1/0/-1),然後你最多可以問62個問題,最後確定出這個a和b是多少?資料範圍: 題解:要想確定a和b的值,況且a,b的範圍最多是3
【Codeforces Round #451 (Div. 2) D】Alarm Clock
force alarm cnblogs bit any inpu size class long long 【鏈接】 我是鏈接,點我呀:) 【題意】 在這裏輸入題意 【題解】 尺取法+二分。 類似滑動窗口。 即左端點為l,右端點為r. 維護a[r]-a[l]
Codeforces Round #451 (Div. 2) F Restoring the Expression
rest strlen int() 開頭 都是 ret 代碼 += code 題意: 有一個a+b=c的等式,去掉兩個符號,把三個數連在一起得到一個數 給出這個數,要求還原等式,length <= 1e6 三個數不能含有前導0,保證有解 解法: 鐵頭過題法,分類然
Codeforces Round #451 Div. 2 C D E
eve == ont span har else const 實用 iterator C。Phone Numbers 之前沒有做過字典樹……感覺這個題字典樹也能做……就拿來練一練字典樹……板子好多地方寫的都不夠好,還需要繼續改…… emmm這個……卡了好久啊……不過好在還
小蒟蒻初次CF滾粗+爆炸記 (Codeforces Round #466 Div.2)
.cn reg tex cor using AI printf 刪掉 ref 比賽鏈接:http://codeforces.com/blog/entry/57981 小蒟蒻今天初次在ZCDHJ張大佬的帶領下,打了一場CF (張大佬cnblogs鏈接:https://ww
E. Mahmoud and Ehab and the function Codeforces Round #435 (Div. 2)
its sum lse urn const tdi while The cst http://codeforces.com/contest/862/problem/E 二分答案 一個數與數組中的哪個數最接近: 先對數組中的數排序,然後lower_bound 1 #inc
C - Ilya And The Tree Codeforces Round #430 (Div. 2)
ret vector lis algo node main .com algorithm style http://codeforces.com/contest/842/problem/C 樹 dp 一個數的質因數有限,用set存儲,去重 1 #include
CA Loves Stick(BestCoder Round #78 (div.2))
CA Loves Stick Accepts: 381 Submissions: 3204 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) 問題描述 CA
Codeforces Round #512 (Div. 2)B.Vasya and Cornfield
B. Vasya and Cornfield time limit per test 1 second memory limit per test 256 megabytes
Codeforces Round #371 (Div. 2)C. Sonya and Queries
C. Sonya and Queries time limit per test 1 second memory limit per test 256 megabytes input s
Codeforces Round #433 (Div. 2)
bre lan include pty lap hide priority 現在 blank 題目鏈接:Codeforces Round #433 (Div. 2) codeforces 854 A. Fraction【水】 題意:已知分子與分母的和,求分子小於分母的
Codeforces Round #365 (Div. 2) D - Mishka and Interesting sum(離線樹狀數組)
turn string 之前 algorithm printf ace r++ void contest http://codeforces.com/contest/703/problem/D 題意: 給出一行數,有m次查詢,每次查詢輸出區間內出現次數為偶數次的數字的異
[Codeforces Round #261 (Div. 2) E]Pashmak and Graph(Dp)
solution and other main ems scanf homework max urn Description Pashmak‘s homework is a problem about graphs. Although he always tries
(博弈sg) Codeforces Round #417 (Div. 2) E Sagheer and Apple Tree
paths 相同 friend pri 產生 chan star ren have Sagheer is playing a game with his best friend Soliman. He brought a tree with n nodes numbered
Codeforces Round #432 (Div. 2) D. Arpa and a list of numbers(暴力)
esp for int ans logs and codeforce style inf 枚舉質數,判斷是否超過臨界值。臨界值就是將不是因子中不含這個素數的數的個數乘以x和y的較小值,是否小於當前最小值。 #include <algorithm> #inclu
Codeforces Round #435 (Div. 2) E. Mahmoud and Ehab and the function(預處理+二分)
class [1] can 行處理 long 個數 分享 amp abs 題目鏈接:點我點我 題意:公式:,給出n個數,從a[1]到a[n],和m個數(b數組),然後從b數組裏挑出連續的n個數(也就m-n+1中選擇),按公式計算,使得f最小, 還有q次對a數組的操作(某