感谢 JR 赞助
S O L U T I O N \mathbb{SOLUTION} SOLUTION
设 F ( x ) = y F(x) = y F(x)=y, 沿着 F [ F ( x ) ] = − x F[F(x)] =-x F[F(x)]=−x 这个规则推
F ( x ) = y X F(x)=y \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \mathcal{X} F(x)=y X ↓ \ \ \ \ \ \ \ \ \ ↓ ↓ F ( y ) = F [ F ( x ) ] = − x F(y) = F[F(x)] = -x F(y)=F[F(x)]=−x ↓ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ↓ ↓ F ( − x ) = F [ F ( y ) ] = − y F(-x)=F[F(y)] = -y F(−x)=F[F(y)]=−y ↓ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ↓ ↓ F ( − y ) = F [ F ( − x ) ] = x F(-y) = F[F(-x)] = x F(−y)=F[F(−x)]=x ↓ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ↓ ↓ F ( x ) = F [ F ( − y ) ] = y Y F(x)=F[F(-y)]=y \ \ \ \ \ \ \ \ \mathcal{Y} F(x)=F[F(−y)]=y Y
会发现 X \mathcal{X} X式 又等价于 Y \mathcal{Y} Y式, 得出结论: 对两个正整数 x , y x,y x,y, F ( x ) = ± y F(x)=±\ y F(x)=± y, 只会影响到 F ( x ) , F ( y ) , F ( − x ) , F ( − y ) F(x), F(y), F(-x), F(-y) F(x),F(y),F(−x),F(−y)四个函数的值.
不考虑负数的存在, 原问题转换为 求 1 , 2 , 3 , . . , R 1, 2, 3, .., R 1,2,3,..,R 序列中两两配对的方案数, F ( x ) = ± y F(x) = ± \ y F(x)=± y 是两种不同的方案, 即一次配对有两种不同的选择, ∴ A n s = 2 R / 2 ∗ ( N − 1 ) ∗ ( N − 3 ) . . . ∗ 1 ∴ Ans = 2^{R/2}*(N-1)*(N-3)...*1 ∴Ans=2R/2∗(N−1)∗(N−3)...∗1
C O D E \mathbb{CODE} CODE
#include<bits/stdc++.h> #define reg register const int maxn = 10000007; int L; int R; int Ans; const int mod = 666623333; int KSM(int a, int b){ int s = 1; while(b){ if(b & 1) s = 1ll*s*a % mod; a = 1ll*a*a % mod; b >>= 1; } return s; } int main(){ scanf("%d%d", &L, &R); if(L != -R) printf("0\n"); else if((L&1) || (R&1)) printf("0\n"); else{ Ans = KSM(2, R/2); for(reg int i = 3; i <= R; i += 2){ Ans = 1ll*Ans*i % mod; } printf("%d\n", Ans); } return 0; }