2014年10月3日 星期五

TIOJ 1082 . C.分堆問題




#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<vector>
#include<utility>
#include<map>
#include<set>
#include<queue>
#include<cmath>
using namespace std;
typedef long long int int64;
bool chose[1000010];
int arr0[1000010];
int arr1[1000010];
int main()
{
 int n;
 for(;;){
  scanf("%d", &n);
  if(n == 0) break;
  if(n == 1){
   int a, b;
   scanf("%d %d",&a, &b);
   if(a==0 or b == 0)
    puts("0");
   else
    puts("-1");
   continue;
  }
  int chosum = 0;
  for(int lx = 0;lx < n;lx++){
   scanf("%d %d", arr0+lx, arr1+lx);
   chose[lx] = arr0[lx] <= arr1[lx];
   chosum += chose[lx];
  }
  if(chosum == 0){
   int cnt1 = 0;
   for(int lx = 0;lx < n;lx++)
    cnt1 += arr1[lx];
   if(cnt1 > 0){
    int ind = 0;
    for(int lx = 0;lx < n;lx++)
     if(arr0[ind]-arr1[ind] >= arr0[lx]-arr1[lx])
      ind = lx;
    chose[ind] = 1;
   }
  }else if(chosum == n){
   int cnt0 = 0;
   for(int lx = 0;lx < n;lx++)
    cnt0 += arr0[lx];
   if(cnt0 > 0){
    int ind = 0;
    for(int lx = 0;lx < n;lx++)
     if(arr1[ind]-arr0[ind] >= arr1[lx]-arr0[lx])
      ind = lx;
    chose[ind] = 0;
   }
  }
  int64 ans = 0;
  for(int lx  = 0;lx < n;lx++)
   if(chose[lx])
    ans += arr0[lx];
   else
    ans += arr1[lx];
  printf("%d\n", ans);
 }
 return 0;
}

沒有留言:

張貼留言