题解:CF2225D Exceptional Segments
首先可以打表找到规律,然后尝试证明。
注意到
同理可构造出数列
对于两个数列分别考虑,统计每个数列值属于
:::success[CODE]
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mod = 998244353;
int T, n, m;
void GOGOGO() {
cin >> n >> m;
int ans = 0, res1 = (m + 3) / 4 % mod;
int k = m;
while ((k + 3) % 4) k++;
if (k == m) res1 = (res1 - 1 + mod) % mod;
if (n >= k) ans = (ans + res1 * ((n - k) / 4 % mod + 1) % mod) % mod;
res1 = ((m + 1) / 4 + 1) % mod;
k = m;
while ((k + 1) % 4) k++;
if (k == m) res1 = (res1 - 1 + mod) % mod;
if (n >= k) ans = (ans + res1 * ((n - k) / 4 % mod + 1) % mod) % mod;
cout << ans << '\n';
}
signed main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> T;
while (T--) GOGOGO();
return 0;
}
/*
1 5 9 13 ... 4n+1
0 3 7 11 15 ... 4n+3
*/
:::