专栏文章
题解:AT_abc420_g [ABC420G] sqrt(n²+n+X)
AT_abc420_g题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mio58t8t
- 此快照首次捕获于
- 2025/12/02 13:34 3 个月前
- 此快照最后确认于
- 2025/12/02 13:34 3 个月前
q1uple 随手切了,膜拜。
推式子:
去根号:
把左边写成 的形式:
考虑把 拆成 ,使得存在非负整数 、整数 满足:
2m+2n+1=a \\
2m-2n-1=b
\end{matrix}\right.$$
枚举 $a,b$ 仅需 $\sqrt X$ 的时间复杂度。注意判重。
```cpp
#include<bits/stdc++.h>
#define int long long
#define mp(a,b) make_pair(a,b)
using namespace std;
inline int read(){
int a=0,b=1;
char c=getchar();
while(!isdigit(c)){
if(c=='-') b=-1;
c=getchar();
}
while(isdigit(c)){
a=(a<<1)+(a<<3)+(c-'0');
c=getchar();
}
return a*b;
}
inline void write(int x){
if(x<0) putchar('-'),x=-x;
if(x>=10) write(x/10);
putchar(x%10+48);
}
inline void write1(int x){
write(x),putchar(' ');
}
inline void write2(int x){
write(x),putchar('\n');
}
vector<int> include13;
signed main(){
int n=read()*4-1;
for(int i=-2e7;i<=2e7;i++){
if(i==0) continue;
int a=i,b=n/i;
if(a*b==n){
if((a-b-2)%4==0){
include13.push_back((a-b-2)/4);
}
}
}
sort(include13.begin(),include13.end());
int include13_fAKe=0;
for(int i=1;i<include13.size();i++){
if(include13[i]!=include13[i-1]) include13_fAKe++;
}
write2(include13_fAKe+1);
write1(include13[0]);
for(int i=1;i<include13.size();i++){
if(include13[i]!=include13[i-1]) write1(include13[i]);
}
putchar('\n');
return 0;
}//ABC420G 一定要挽回罗琪钧的遗憾啊,一定会挽回罗琪钧的遗憾的!
```相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...