HDU 4379 The More The Better

一开始一直纠结在Yi + Yj <= L (1 ≤ i < j ≤ m)这句,后来在网上搜了下,恍然大悟啊!原来如此简单,所选取的每个数最多只有一个

大于L/2(看到这我想你就会做了,太关键了),只要每次枚举判断小于L/2就把count++,最后不要忘了把大于L/2的最小值和小于L/2的最大值想加判断一下,

小于L/2就count++;

View Code
 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 
 4 int main()
 5 {
 6     long long  n, L, A, B, mod, max, min,x,len; 
 7     int i,count;
 8     
 9     while(scanf("%I64d%I64d%I64d%I64d%I64d",&n,&L,&A,&B,&mod) != EOF)
10     {
11         len = L/2;
12         count = 0;
13         max = 0;  
14         min = L;  
15         for(i = 1; i <= n; i++)     
16         { 
17            x = (A*i + B) % mod;  
18            if(x <= len)  
19            {
20               count++; 
21              if(x > max) 
22                 max = x;
23            }     
24            else if(x < min && x > len)
25              min = x; 
26         }     
27         if(max + min <= L) 
28            count++;   
29     
30       printf("%d\n",count);    
31     }
32     return 0;
33 }

 

posted @ 2012-08-18 11:08  zhongya  阅读(124)  评论(0编辑  收藏  举报