hdu6383(2018 “百度之星”程序设计大赛 - 初赛(B))
p1m2
Time Limit: 2000/1000 MS (Java/Others)????Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 736????Accepted Submission(s): 268
Problem Description
度度熊很喜歡數(shù)組!!
我們稱一個整數(shù)數(shù)組為穩(wěn)定的,若且唯若其同時符合以下兩個條件:
1. 數(shù)組里面的元素都是非負(fù)整數(shù)。
2. 數(shù)組里面最大的元素跟最小的元素的差值不超過?1。
舉例而言,[1,2,1,2]?是穩(wěn)定的,而?[?1,0,?1]?跟?[1,2,3]?都不是。
現(xiàn)在,定義一個在整數(shù)數(shù)組進(jìn)行的操作:
* 選擇數(shù)組中兩個不同的元素?a?以及?b,將?a?減去?2,以及將?b?加上?1。
舉例而言,[1,2,3]?經(jīng)過一次操作后,有可能變?yōu)?[?1,2,4]?或?[2,2,1]。
現(xiàn)在給定一個整數(shù)數(shù)組,在任意進(jìn)行操作后,請問在所有可能達(dá)到的穩(wěn)定數(shù)組中,擁有最大的『數(shù)組中的最小值』的那些數(shù)組,此值是多少呢?
Input
輸入的第一行有一個正整數(shù)?T,代表接下來有幾組測試數(shù)據(jù)。
對于每組測試數(shù)據(jù):
第一行有一個正整數(shù)?N。
接下來的一行有?N?個非負(fù)整數(shù)?xi,代表給定的數(shù)組。
*?1≤N≤3×105
*?0≤xi≤108
*?1≤T≤18
* 至多?1?組測試數(shù)據(jù)中的?N>30000
Output
對于每一組測試數(shù)據(jù),請依序各自在一行內(nèi)輸出一個整數(shù),代表可能到達(dá)的平衡狀態(tài)中最大的『數(shù)組中的最小值』,如果無法達(dá)成平衡狀態(tài),則輸出??1。
Sample Input
2
3
1 2 4
2
0 100000000
Sample Output
2
33333333
Source
2018 “百度之星”程序設(shè)計大賽 - 初賽(B)
解析:可以證明,最后的-2,+1的數(shù)組肯定可以變成穩(wěn)定數(shù)組。因為我們每次的操作相當(dāng)于把兩個數(shù)的和減一,兩次就是每個數(shù)-1.(a-2,b+1,? ? a+1,b-2)。最后肯定可以變成01這樣的數(shù)組,就是穩(wěn)定數(shù)組。在變化的過程有穩(wěn)定數(shù)組的存在。說明我們就可以求的答案。
二分枚舉。判斷左邊的操作次數(shù)與右邊的操作次數(shù),若是右邊的大于等于左邊的,說明答案可能存在mid往上的某一個數(shù),反之亦然。
#include<bits/stdc++.h> using namespace std;#define e exp(1) #define pi acos(-1) #define mod 1000000007 #define inf 0x3f3f3f3f #define ll long long #define ull unsigned long long #define mem(a,b) memset(a,b,sizeof(a)) int gcd(int a,int b){return b?gcd(b,a%b):a;}int a[300005]; int main() {int T;scanf("%d",&T);while(T--){int n;scanf("%d",&n);for(int i=0; i<n; i++){scanf("%d",&a[i]);}sort(a,a+n);int l=0,r=1e8;int ans=0;while(l<=r){ll x=0,y=0;int mid=l+r>>1;for(int i=0; i<n; i++){if(mid>a[i])x+=mid-a[i];if(mid<a[i])y+=(a[i]-mid)/2;}if(x<=y){ans=max(ans,mid);l=mid+1;}else r=mid-1;}printf("%d\n",ans);}return 0; }?
總結(jié)
以上是生活随笔為你收集整理的hdu6383(2018 “百度之星”程序设计大赛 - 初赛(B))的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hdu6380(2018 “百度之星”程
- 下一篇: hdu1058(dp||优先队列)