51nod算法马拉松28-c
Posted 宣毅鸣
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51nod算法马拉松28-c相关的知识,希望对你有一定的参考价值。
题解:
按照每一个要求,分类讨论,讨论压下去了多少
代码:
#include<bits/stdc++.h> using namespace std; const int MOD=1e9+7,N=20000005; int n,A,B,C,ans,x,a,b,M,u[N],v[N],p,k; int main() { scanf("%d%d%d%d%d%d%d%d",&n,&A,&B,&C,&x,&a,&b,&M); int l=N/2,r=N/2-1; for (int i=1;i<=n;i++) { x=((long long)a*x+b)%M; int X,Y=x; if (k<=1||x%(A+B+C)<A)X=0; else if (x%(A+B+C)<A+B)X=1; else X=2; if (X==2) { k--;p--; while (v[r]+p==0)r--; (ans+=u[r])%=MOD; } if (X==0) { k++;p++; if (u[r]<Y)u[++r]=Y,v[r]=-p+1; (ans+=u[r])%=MOD; } if (X==1) { k++; while (l<=r&&u[l]<Y)l++; u[--l]=Y;v[l]=k-p; (ans+=u[r])%=MOD; } } printf("%d",ans); }
以上是关于51nod算法马拉松28-c的主要内容,如果未能解决你的问题,请参考以下文章
51Nod 算法马拉松12 Rikka with sequences