CF1016CVasya And The Mushrooms(模拟)
Posted myx12345
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CF1016CVasya And The Mushrooms(模拟)相关的知识,希望对你有一定的参考价值。
题意:给定一个2*n的矩阵,每一个点有一个权值,从左上角出发,时间t=0开始,连续的走,将矩阵走完,
每走一步,t++,并且得到t*当前格子的权值的值,求最大的权值和
n<=3e5,1<=a[i][j]<=1e6
思路:合法的构造方案如图
记录几个前缀和,真的不想写这种题
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 typedef long long ll; 6 using namespace std; 7 #define N 310000 8 #define oo 10000000 9 #define MOD 1000000007 10 11 ll s1[2][N],s2[2][N],s3[2][N],a[2][N]; 12 13 int main() 14 { 15 int n; 16 scanf("%d",&n); 17 for(int i=0;i<2;i++) 18 for(int j=0;j<n;j++) scanf("%lld",&a[i][j]); 19 for(int i=0;i<2;i++) 20 for(int j=n-1;j>=0;j--) 21 { 22 s1[i][j]=s1[i][j+1]+a[i][j]*(j+1); 23 s2[i][j]=s2[i][j+1]+a[i][j]*(n-j); 24 s3[i][j]=s3[i][j+1]+a[i][j]; 25 } 26 ll sum=0,ans=0; 27 for(int i=0,j=0;j<n;j++,i^=1) 28 { 29 ll tmp=sum; 30 tmp+=s1[i][j]+s3[i][j]*j; 31 tmp+=s2[i^1][j]+s3[i^1][j]*(j+n); 32 ans=max(ans,tmp); 33 sum+=a[i][j]*(j*2+1); 34 sum+=a[i^1][j]*(j*2+2); 35 } 36 for(int i=0;i<n;i++) ans-=a[0][i]+a[1][i]; 37 printf("%lld ",ans); 38 return 0; 39 } 40
以上是关于CF1016CVasya And The Mushrooms(模拟)的主要内容,如果未能解决你的问题,请参考以下文章
CodeForces - 1016D Vasya And The Matrix
CF 862C Mahmoud and Ehab and the xor(异或)