题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4379 

 

多么简单的一道题,比赛的时候竟然想着用数组存上,结果MLE了,然后就一直在纠结他的那句every pair of (Yi, Yj) satisfies Yi + Yj <= L (1 ≤ i < j ≤ m), and every Yi <= L (1 ≤ i ≤ m ) 。。。。

 

思路:从1-n算出Xi ,如果<=L/2,sum++,算的过程中记下<=L/2的最大值和>L/2的最小值,如果这两个值的和<=L,sum++。。

 

代码:

 1 #include <iostream>
 2 #include <cstring>
 3 #include <cstdio>
 4 #define LL long long
 5 using namespace std;
 6 int main()
 7 {
 8     LL a,b,mod,n,l,min,max,ll,k;
 9     int i,j,sum;
10     while(~scanf("%I64d%I64d%I64d%I64d%I64d",&n,&l,&a,&b,&mod))
11     {
12         max=0;
13         min=l;
14         sum=0;
15         ll=l/2;
16         for(i=1;i<=n;i++)
17         {
18             k=(a*i+b)%mod;
19             if(k<=ll)
20             {
21                 sum++;
22                 if(k>max)
23                     max=k;
24             }
25             else if(k<min)
26                 min=k;
27         }
28         if(min+max<=l)
29             sum++;
30         printf("%d\n",sum);
31     }
32     return 0;
33 }


 

 

posted on 2012-08-17 08:38  pony1993  阅读(298)  评论(0编辑  收藏  举报

View My Stats