51NOD - 1080 两个数的平方和【简单二分】
2017-11-21 21:42
239 查看
1080 两个数的平方和
给出一个整数N,将N表示为2个整数i j的平方和(i <= j),如果有多种表示,按照i的递增序输出。例如:N = 130,130 = 3^2 + 11^2 = 7^2 + 9^2 (注:3 11同11 3算1种)
Input
一个数N(1 <= N <= 10^9)Output
共K行:每行2个数,i j,表示N = i^2 + j^2(0 <= i <= j)。如果无法分解为2个数的平方和,则输出No Solution
Input示例
130Output示例
3 117 9
题意: 注意有多个答案,范围,没有的话输出”No Solution”,等
分析: 先预处理好之后,然后直接枚举二分即可,这里用upper_pound即可,复杂度O(n∗lgn)
参考函数
#include<bits/stdc++.h> #define ll long long using namespace std; const int N = 40000+10; ll a ; void init() { a[0] = 0; for(int i = 1;i < N;i++) { a[i] = i*1ll*i; } } int main(){ ios_base::sync_with_stdio(0); init(); ll n;cin>>n; bool flg = false; for(int i = 0;i < N;i++) { int t = lower_bound(a,a+N,n-a[i]) - a; if(a[i] + a[t] == n && t >= i) { flg = true; cout<<i<<' '<<t<<endl; } } if(!flg) cout<<"No Solution"<<endl; return 0; }
如有错误或遗漏,请私聊下UP,thx
相关文章推荐
- 51nod 1080 两个数的平方和【二分+预处理】
- 51nod 1080 两个数的平方和【二分】
- 51nod 1080:两个数的平方和
- 51Nod 1080 两个数的平方和
- 51nod 1080 两个数的平方和
- 51nod 1080 两个数的平方和
- 51Nod 1080 两个数的平方和
- 51nod 1080 两个数的平方和
- 51Nod-1080-两个数的平方和
- 1080 两个数的平方和 分类: 51nod 2015-07-20 22:20 11人阅读
- 51Nod ——1080 两个数的平方和
- 51Nod 1080 两个数的平方和
- 51nod-【1080 两个数的平方和】
- 【51nod】1080 两个数的平方和
- 51nod 1080 两个数的平方和
- 51nod 1080 两个数的平方和
- 51nod 1080 两个数的平方和
- 51Nod 1080 两个数的平方和(数论)
- 51nod 1080 两个数的平方和
- 51nod 1080 两个数的平方和