1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| #include<cstdio> #include<algorithm> #include<cstring> #include<iostream> using namespace std; const int N=2500010; struct sum{ int s,c,d; bool operator< (const sum &t)const { if(s!=t.s)return s<t.s; if(s!=t.c)return c<t.c; return d<t.s; } }sum[N]; int n,m; int q[N]; int main() { cin>>n; for(int c=0;c*c<=n;c++) for(int d=c;c*c+d*d<=n;d++) sum[m++]={c*c+d*d,c,d}; sort(sum,sum+m); for(int a=0;a*a<=n;a++) for(int b=a;b*b+a*a<=n;b++) { int t=n-a*a-b*b; int l=0,r=m; while(r>l) {int mid=(r+l)>>1; if(sum[mid].s>=t) r=mid; else l=mid+1;
} if(sum[l].s==t) { printf("%d %d %d %d\n",a,b,sum[l].c,sum[l].d); return 0; } } return 0; }
|