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 }