CSU 1648: Swipe

来源:互联网 发布:uu加速器for mac 编辑:程序博客网 时间:2024/06/05 10:41

http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1648

题意:
问最少几次横扫可以消灭所有敌人。
相当于每次所有人体力值减1,而且有三点可以任意给一个人,二分答案就可以了!

#include<bits/stdc++.h>using namespace std;#define ll long longconst int maxn=1e3+10;int a[maxn];int b[maxn];int t,n;bool check(int num){    for(int i=1;i<=n;i++){        b[i]=a[i];    }    int sum=0;    for(int i=1;i<=n;i++){        b[i]-=num;        if(b[i]>0) sum+=((b[i]+2)/3);    }    return sum<=num;}int main(){    cin>>t;    while(t--){        scanf("%d",&n);        for(int i=1;i<=n;i++){            scanf("%d",&a[i]);        }        int l=-1;int r=(int)1e9+1;        while(l+1<r){            int mid=(l+r)/2;            if(check(mid)) r=mid;            else l=mid;        }        printf("%d\n",r);    }}
0 0