题解:P16261 [蓝桥杯 2026 省 Python/Java B 组] 干涉条纹

· · 题解

首先令 A=20269876543210B=20260123456789

接着枚举这个平方数,易知是 O(\sqrt{A+B}) 的。接着算它的贡献。

S=a+b\\ a=S-b\\ 0\le a\le A\\ 0\le S-b\le A\\ S-A\le b\le S\\ 0\le b\le B\\ \max(0,S-A)\le b\le \min(B,S)

l=\max(0,S-A)r=\min(B,S),则贡献为 r-l+1

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll A=20269876543210,B=20260123456789,mod=998244353;
int main(){
    ll sum=0;
    for(ll i=0;i*i<=A+B;++i){
        ll p=i*i,l=max(0ll,p-A),r=min(p,B);
        sum=(sum+max(0ll,(r-l+1)%mod))%mod;
    }
    printf("%lld",sum);
}

简洁亿点的代码

main(){__builtin_printf("315082704");}