2 条题解
-
0XzyStudio (admin) LV 8 MOD RP++ 机房蒟蒻 tayz @ 2024-11-02 19:22:43
数据生成器:
#include<iostream> #include<bits/stdc++.h> #define int long long using namespace std; const int T=1e2,N=1e9; mt19937 rnd(time(nullptr)); signed main(){ freopen("triple10.in","w",stdout); cout<<T<<"\n"; for(int i=1;i<=T;i++) cout<<rnd()%1000+N-1000+1<<"\n"; return 0; }
-
02024-11-02 19:10:44@
ARC160B
对 \(x,y,z\) 三个数中不同的数的数量分类讨论。
\(x,y,z\) 互不相同时,答案为钦定 \(x<y<z\) 时的方案数 \(\times 6\) ;
\(x,y,z\) 有两个数相同时,答案为钦定 \(x=y<z\) 时的方案数 \(\times 3\) 加钦定 \(x<y=z\) 时的方案数 \(\times 3\) 。
\(x=y=z\) 时,答案为此时的方案数 \(\times 1\) 。
\(x<y<z\) 与 \(x=y<z\) 的情况均可通过枚举 \(y\) 做到 \(O(\sqrt n)\) 。 \(x<y=z\) 与 \(x=y=z\) 的情况等价于 \(z^2\le n\) ,可以直接 \(O(1)\) 计算。
总复杂度 \(O(T\sqrt{n})\) 。
std
#include<iostream> #define int long long using namespace std; int t,n,sq,ans; const int mod=998244353,inv=(mod+1)/2; long long x; signed main(){ freopen("triple.in","r",stdin); freopen("triple.out","w",stdout); cin>>t; while(t--){ cin>>n; sq=0; while(sq*sq<=n) sq++; sq--; for(int i=2;i<=sq;i++) ans=(ans+6*(i-1)%mod*(n/i-i))%mod; for(int i=1;i<=sq;i++) ans=(ans+3*(n/i-i))%mod; ans=(ans+3*sq%mod*(sq-1)%mod*inv%mod+sq)%mod; cout<<ans<<"\n"; ans=0; } return 0; }
- 1
信息
- ID
- 1076
- 难度
- 9
- 分类
- (无)
- 标签
- (无)
- 递交数
- 8
- 已通过
- 3
- 通过率
- 38%
- 上传者