首页 > 编程语言 > 详细

51nod算法马拉松28-c

时间:2017-09-11 20:27:24      阅读:237      评论:0      收藏:0      [点我收藏+]

题解:

按照每一个要求,分类讨论,讨论压下去了多少

代码:

#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

原文:http://www.cnblogs.com/xuanyiming/p/7506695.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!