Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
AC代码(一堆二分和sort,好慢) #include <iostream> #include <cmath> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define fs first #define se second #define INF 1e15 + 5 typedef long long LL; const int M = 40; bool cmp(pair<LL, LL> a, pair<LL, LL> b){ if(a.fs == b.fs) return a.se < b.se; return a.fs < b.fs; } LL num[M]; pair<LL, LL> sum[1000000]; LL ab(LL x){ if(x < 0) return -x; return x; } int main() { int n; sum[0].fs = -INF, sum[0].se = 0; while(scanf("%d", &n) && n){ memset(num, 0, sizeof(num)); LL res = INF, ans = INF, anstot = INF; for(int i = 1; i <= n; i++) scanf("%lld", &num[i]); if(n == 1){ printf("%lld 1\n", ab(num[1])); continue; } int m = n - n / 2, cnt = 0; for(LL i = 0; i < (1<<m); i++){ LL sum2 = 0, tot = 0; for(LL j = 0; (1<<j) <= i; j++) if((i>>j) & 1) sum2 += num[n/2+j+1], tot++; sum[++cnt].fs = sum2; sum[cnt].se = tot; } sort(sum+1, sum+1+cnt, cmp); for(LL i = 1; i < (1<<n/2); i++){ LL sum1 = 0, tot = 0; for(LL j = 0; (1<<j) <= i; j++) if((i>>j) & 1) sum1 += num[j+1], tot++; int k2 = lower_bound(sum+1, sum+1+cnt, make_pair(-sum1, 0), cmp) - sum; int k1 = lower_bound(sum+1, sum+1+cnt, make_pair(sum[k2-1].fs, 0), cmp) - sum; if(k1 < 1) k1 = 1; if(k1 > cnt) k1 = cnt; if(k2 < 1) k2 = 1; if(k2 > cnt) k2 = cnt; for(int j = k1; j <= k2; j++) if(ab(sum1 + sum[j].fs) < res || (ab(sum1 + sum[j].fs) == res && tot + sum[j].se < anstot)){ res = ab(sum1 + sum[j].fs); ans = sum1 + sum[j].fs; anstot = tot + sum[j].se; } } for(int i = 1; i <= cnt; i++) sum[i].fs = ab(sum[i].fs); sort(sum+1, sum+1+cnt, cmp); int j = 1; if(sum[j].se == 0) j++; if(ab(sum[j].fs) < res || (ab(sum[j].fs) == res && sum[j].se < anstot)){ res = ab(sum[j].fs); ans = sum[j].fs; anstot = sum[j].se; } printf("%lld %lld\n", ab(ans), anstot); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator