思路:
可以用尺取法,定义左指针i和右指针j,有3种情况
1.和等于所求值,输出i,j,清空和,左指针i加一
2.和小于所求值,右指针加一
3.和大于所求值左指针加一
Code:
#include<bits/stdc++.h>
using namespace std;
inline long long llread(){
long long x=0,f=1;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-')f=-1;
ch=getchar();
}
while(isdigit(ch)){
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*f;
}
inline int read(){
int x=0,f=1;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-')f=-1;
ch=getchar();
}
while(isdigit(ch)){
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*f;
}
inline void llwrite(long long x){
if(x<0)putchar('-'),x=-x;
if(x>9)llwrite(x/10);
putchar(x%10+'0');
}
inline void write(int x){
if(x<0)putchar('-'),x=-x;
if(x>9)write(x/10);
putchar(x%10+'0');
}
int n,he;
int main(){
n=read();
for(int i=1,j=0;i<=n/2;){
if(he==n){
write(i);
putchar(' ');
write(j);
puts("");
he-=i;
i++;
}else if(he<n){
j++;
he+=j;
}else{
he-=i;
i++;
}
}
return 0;
}