首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

hdu 4379 The More The Better 多校联结赛事第8场

2012-09-20 
hdu 4379 The More The Better 多校联合赛事第8场Problem DescriptionInputOutputSample InputSample Outp

hdu 4379 The More The Better 多校联合赛事第8场
Problem DescriptionInputOutputSample InputSample Output/*题意是 给出A,B,mod n l问对于k 从1到n 按公式 Xk = (A * k + B) % mod 求出的串中找出子串Y1, Y2, ... , Ym 且对于串中任意元素小于l 且任意2元素之和小于l问 找出的串中 最多有多少个元素 即m的值 *//*由题意 Yi + Yj <= L 任意2个元素之和小于l 那么最多只可能有1个元素大于l那么 把所有的小于l/2的都入选 那么这些数肯定是满足题目要求的 那么现在还可以加入一个大于l/2的 前提是 入选的中最大的那个 加上这个数小于l那么只要入选的当中的最大的加上没有入选的中的最小的 如果这2者之和小于l 那么又可以入选一个*//*一开始做的误区 : 把串当成了连续的子串 子串本是可以不连续的*/#include<stdio.h>int main(){ __int64 i,n,l,a,b,mod,ban,num,max,min,x;//max是入选的最大值 min是未入选的最小值 while(scanf("%I64d %I64d %I64d %I64d %I64d",&n,&l,&a,&b,&mod)!=EOF) { ban=l/2;num=0;max=-1;min=9999999999999; for(i=1;i<=n;i++){x=((__int64)((__int64)a*i+b)%mod);if(x<=ban)// 小于等于l/2 则入选{num++;if(max<x) max=x;}else{ if(min>x) min=x; } }if(max+min<=l) num++;printf("%I64d\n",num); } return 0;}

热点排行