logo AlgoBeat OnlineJudge
登录 注册

「[蓝桥杯 2026 省 Java A 组] 间歇性发射」题解

作者: Dr_KC_Haus  ·  发布于 2026-07-10 14:59:19  ·  最后修改于 2026-07-10 15:03:13
已通过
审核员:Lemon_zqp 弱弱 · 2026-07-10 15:03:13

为方便阅读

工作状态的时钟点 满足 同奇偶,每个合法的 对应一对数值:,其异或结果恒为 。所以,只需要统计区间内合法 的数量 ,若所有 对应的 均未超出 ,则总异或和取决于 的奇偶性:奇数为 ,偶数为

若最后一个合法的 对应的 超出 ,那么则该点仅对应 ,此时总异或和为前 对产生的奇偶值与 的异或结果。

最后将计算得到的异或和与初始校验值 进行异或运算,就能得到最终的校验码。

AC Code

#include <bits/stdc++.h>
using namespace std;
#define int long long
int A=12345678901235LL;
int M=98765432109874LL;
int S=20260411LL;
int e=M/2,m;
int sum=0;
bool f;
signed main() {
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    if((e%2)==(A%2)) m=e;
    else m=e-1;
    int cnt=(m-A)/2+1;
	if (2*m+1<=M) f=true;
	else f=false;   
    if(f){
        if(cnt%2!=0) sum=1;
        else sum=0;
    }else{
        int p=cnt - 1;
        int x;
		if(p%2!=0) x=1;
		else x=0;
        int s=2*m;
        sum=x^s;
    }
    cout<<(S^sum)<<endl;
    exit(0);
}

暂无评论

登录 后即可评论。