题解:AT_abc420_g [ABC420G] sqrt(n²+n+X)
include13_fAKe · · 题解
q1uple 随手切了,膜拜。
推式子:
去根号:
把左边写成
考虑把
枚举
#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 一定要挽回罗琪钧的遗憾啊,一定会挽回罗琪钧的遗憾的!