大佬帮我看看哪里错了?
2025-07-06 11:13:19
发布于:浙江
23阅读
0回复
0点赞
我的代码:
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const int MOD=998244353;
static ll A[300005], g[300005];
int main(){
int n;
ll m,a;
cin>>n>>m>>a;
for(int i=0;i<n;i++) cin>>A[i];
ll ans=0;
if(a==0){
ll S=0;
for(int i=0;i<n;i++){
g[i] = A[i] / m;
S ^= g[i];
}
if(S != 0){
for(int i=0;i<n;i++){
ll gi = g[i];
ll T = S ^ gi;
if(gi > T){
ll k = gi - T;
if(k >= 1 && k * m <= A[i]){
ans++;
if(ans >= MOD) ans -= MOD;
}
}
}
}
cout << ans % MOD;
return 0;
}
ll d = __gcd(a, m);
ll a1 = a / d, m1 = m / d;
if(a1 == 1){
ll S2 = 0;
for(int i=0;i<n;i++){
ll v = A[i] / d;
ll gi = (v >= 1 ? (v & 1LL) : 0LL);
g[i] = gi;
S2 ^= gi;
}
if(S2 != 0){
for(int i=0;i<n;i++){
ll gi = g[i];
ll T = S2 ^ gi;
ll v = A[i] / d;
if(v < 1) continue;
ll K = (v - 1) / m1;
if(m1 % 2 == 0){
if(((v - 1) & 1LL) == T){
ll cnt = (K + 1) % MOD;
ans = (ans + cnt) % MOD;
}
} else {
ll tot = K + 1;
ll need = ((v - 1) - T) & 1LL;
ll cnt = (tot + (1 - need)) / 2;
ans = (ans + cnt % MOD) % MOD;
}
}
}
cout << ans % MOD;
return 0;
}
ll S3 = 0;
for(int i=0;i<n;i++){
g[i] = (A[i] / d) / m1;
S3 ^= g[i];
}
if(S3 != 0){
for(int i=0;i<n;i++){
ll gi = g[i];
ll T = S3 ^ gi;
if(gi > T){
ll k = gi - T;
if(k >= 1 && k * m1 <= A[i] / d){
ans++;
if(ans >= MOD) ans -= MOD;
}
}
}
}
cout << ans % MOD;
return 0;
}
测试点结果:
全部评论 1
顶!
2025-07-06 来自 浙江
0
有帮助,赞一个