1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
using namespace std;
using LL = long long; const int maxn = 300003; int dx[5] = {0, 0, 1, -1}; int dy[5] = {1, -1, 0, 0}; int n; LL a[maxn], b[maxn]; LL sa[maxn], sb[maxn], ia[maxn], ib[maxn], da[maxn], db[maxn];
signed () { while(~scanf("%d", &n)) { for(int i = 0; i < n; i++) scanf("%lld",&a[i]); for(int i = 0; i < n; i++) scanf("%lld",&b[i]); memset(sa, 0, sizeof(sa)); memset(sb, 0, sizeof(sb)); memset(ia, 0, sizeof(ia)); memset(ib, 0, sizeof(ib)); memset(da, 0, sizeof(da)); memset(db, 0, sizeof(db)); for(int i = n - 1; i >= 0; i--) { sa[i] = sa[i+1] + a[i]; sb[i] = sb[i+1] + b[i]; ia[i] = ia[i+1] + a[i] * (LL)(n-i-1LL); ib[i] = ib[i+1] + b[i] * (LL)(n-i-1LL); da[i] = da[i+1] + a[i] * (LL)i; db[i] = db[i+1] + b[i] * (LL)i; } LL ret = 0, tmp = 0; for(int i = 0; i < n; i++) { if(i & 1) { LL tr = db[i] + sb[i] * (2LL*i - i); tr += ia[i] + sa[i] * (2LL*i + n - i); ret = max(ret, tmp+tr); tmp += (2LL*i*b[i]); tmp += (2LL*i+1LL)*a[i]; } else { LL tr = da[i] + sa[i] * (2LL*i - i); tr += ib[i] + sb[i] * (2LL*i + n - i); ret = max(ret, tmp+tr); tmp += (2LL*i*a[i]); tmp += (2LL*i+1LL)*b[i]; } } printf("%lldn", ret); } return 0; }
|
近期评论