[COCI2022-2023 #1] Iksevi 题解

· · 题解

数学课想出来的奇怪做法。

以下为方便讨论,令 m=\dfrac{n}{2}

由已知得,对于一个 m,其地砖边上的点必然满足以下条件:

等价于:

所以令 S=\{m|[m|\gcd(x,y)]\}R=\{m|x+y\not\equiv 0\pmod {2m}\}T=S\cap R,答案即为 |T|

$[1,10^7]$ 以内所有数的因数个数可以对于每个数暴力枚举倍数预处理,令 $A=10^7$,时间复杂度 $O(A\log A)$。但因为常数小并且时限 $3\mathrm{s}$ 所以可以过。 放代码: ```cpp #include<bits/stdc++.h> using namespace std; int a[10000001]; int main(){ ios::sync_with_stdio(false); for(int i=1;i<=1e7;i++) for(int j=1;i*j<=1e7;j++)a[i*j]++; // 预处理 int t; cin>>t; while(t--){ int x,y,c=0; cin>>x>>y; int g=gcd(x,y),m=gcd(x+y>>1,g); cout<<a[g]-(x+y&1?0:a[m])<<'\n'; // 计算答案 } return 0; } ```