2015年1月28日 星期三

TIOJ 1082 C.分堆問題

#include <cstdio>
#include <cstdlib>
#include <algorithm>
using namespace std;
#define ll long long
ll a[1000002],b[1000002];
int main(){
    int n;
    while(true){
        scanf("%d",&n);
        if(n==0)
            break;
        int black=0,white=0;
        ll all_b=0,all_w=0;
        ll minus=2147483647;
        int site;
        ll ans=0;
        if(n==1){
            scanf("%lld %lld",&a[0],&b[0]);
            if(a[0]==0 || b[0]==0)
                printf("0\n");
            else
                printf("-1\n");
            continue;
        }
        for(int i=0;i<n;i++){
            scanf("%lld %lld",&a[i],&b[i]);
            all_w+=b[i];
            all_b+=a[i];
            if(a[i]>b[i]){
                black++;
                ans+=b[i];
            }
            else{
                white++;
                ans+=a[i];
            }
            ll t=abs(a[i]-b[i]);
            if(t<minus){
                minus=t;
                site=i;
            }
        }
        if(black==0 || white==0)
            ans+=minus;    
        printf("%lld\n",ans);

    }
}

2 則留言: