HDU - 6383 百度之星2018初赛B 1004 p1m2(二分答案)
p1m2
? ?Accepts: 1003 ? ?Time Limit: 2000/1000 MS (Java/Others) ? ?Memory Limit: 131072/131072 K (Java/Others) Problem Description度度熊很喜歡數(shù)組!!
我們稱一個(gè)整數(shù)數(shù)組為穩(wěn)定的,若且唯若其同時(shí)符合以下兩個(gè)條件:
1. 數(shù)組里面的元素都是非負(fù)整數(shù)。
2. 數(shù)組里面最大的元素跟最小的元素的差值不超過(guò)?1。
舉例而言,[1,2,1,2]?是穩(wěn)定的,而?[?1,0,?1]?跟?[1,2,3]?都不是。
現(xiàn)在,定義一個(gè)在整數(shù)數(shù)組進(jìn)行的操作:
* 選擇數(shù)組中兩個(gè)不同的元素?a?以及?b,將?a?減去?2,以及將?b?加上?1。
舉例而言,[1,2,3]?經(jīng)過(guò)一次操作后,有可能變?yōu)?[?1,2,4]?或?[2,2,1]。
現(xiàn)在給定一個(gè)整數(shù)數(shù)組,在任意進(jìn)行操作后,請(qǐng)問(wèn)在所有可能達(dá)到的穩(wěn)定數(shù)組中,擁有最大的『數(shù)組中的最小值』的那些數(shù)組,此值是多少呢?
輸入的第一行有一個(gè)正整數(shù)?T,代表接下來(lái)有幾組測(cè)試數(shù)據(jù)。
對(duì)于每組測(cè)試數(shù)據(jù):
第一行有一個(gè)正整數(shù)?N。
接下來(lái)的一行有?N?個(gè)非負(fù)整數(shù)?xi,代表給定的數(shù)組。
*?1≤N≤3×105
*?0≤xi≤108
*?1≤T≤18
* 至多?1?組測(cè)試數(shù)據(jù)中的?N>30000
對(duì)于每一組測(cè)試數(shù)據(jù),請(qǐng)依序各自在一行內(nèi)輸出一個(gè)整數(shù),代表可能到達(dá)的平衡狀態(tài)中最大的『數(shù)組中的最小值』,如果無(wú)法達(dá)成平衡狀態(tài),則輸出??1。
Sample Input 2 3 1 2 4 2 0 100000000 Sample Output 2 33333333 Statistic?|?Submit?|?Clarifications?|?Back 操作次數(shù)滿足有序性,二分枚舉答案即可。 #include<iostream> #include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> #include<algorithm> #define MAX 300005 #define INF 0x3f3f3f3f #define MOD 1000000007 using namespace std; typedef long long ll;int a[MAX];int main() {int t,x,y,n,i;scanf("%d",&t);while(t--){int l=0,r=100000000,m=0;scanf("%d",&n);for(i=1;i<=n;i++){scanf("%d",&a[i]);}int maxx=-1;while(l<=r){m=(l+r)/2;ll c1=0,c2=0;for(i=1;i<=n;i++){if(m<a[i]){c2+=(a[i]-m)/2;}else if(a[i]<m){c1+=m-a[i];}}if(c1<=c2){maxx=max(maxx,m);l=m+1;}else{r=m-1;}}printf("%d\n",maxx);}return 0; }?
轉(zhuǎn)載于:https://www.cnblogs.com/yzm10/p/9463819.html
總結(jié)
以上是生活随笔為你收集整理的HDU - 6383 百度之星2018初赛B 1004 p1m2(二分答案)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 《Delphi XE6 android
- 下一篇: ECstore报表不显示解决