#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; }
2014年10月3日 星期五
TIOJ 1082 . C.分堆問題
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言