枚举统计所有<=L/2的数,在找到是否存在一个>L/2的数使所有其它数加上它都不大于L即可。
注意枚举的时候把模运算进行转化。
1 #include <stdio.h> 2 #include <string.h> 3 #define INF 0x7fffffff 4 typedef __int64 LL; 5 int n, l, a, b, mod; 6 int main(){ 7 //freopen("test.in", "r", stdin); 8 while (scanf("%d%d%d%d%d", &n, &l, &a, &b ,&mod) != EOF) { 9 int maxl = 0, ans = 0, minl = INF, half = l/2, val = b % mod; 10 a %= mod; 11 for (int i = 1; i <= n; i++) { 12 val += a; 13 if (val >= mod) val -= mod; 14 if (val <= half) { 15 ans++; 16 if (maxl < val) maxl = val; 17 } else if (minl > val) minl = val; 18 } 19 if ((LL)minl + maxl <= l) ans++; 20 printf("%d\n", ans); 21 } 22 return 0; 23 }