1080 兩個數的平方和
基準時間限制:1 秒 空間限制:131072 kb 分值: 5
難度:1級演算法題
給出乙個整數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)。input示例如果無法分解為2個數的平方和,則輸出no solution
130output示例
3 11思路:預處理小於n的所有平方數。然後二分,(nlogn)7 9
說下兩個常用的stl二分查詢方法 .
lower_bound(a, a + n, k) - a; 前兩個引數是查詢範圍,左閉右開。第三個引數是值, 返回的是位址,所以 -a 可以得到下標。
在陣列[0,n)中找到第乙個
大於等於
k的下標,找不到返回n,即最後乙個元素的下乙個位置.
同理 upper_bound(a, a + n, k) -a;
在陣列[
0,n)中找到第乙個
大於k的下標,找不到返回n)
code :
#include using namespace std;
const int max = (int)1e9;
set> iset;
int a[50000] = ;
int main(void)
for (int i = 0; i < j; i++)
}set>::iterator it;
if (!iset.empty())
}else
return 0;
}
51nod 1080 兩個數的平方和
1080 兩個數的平方和 基準時間限制 1 秒 空間限制 131072 kb 分值 5 難度 1級演算法題 給出乙個整數n,將n表示為2個整數i j的平方和 i j 如果有多種表示,按照i的遞增序輸出。例如 n 130,130 3 2 11 2 7 2 9 2 注 3 11同11 3算1種 inpu...
51nod1080 兩個數的平方和
給出乙個整數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...
51nod1080 兩個數的平方和
給出乙個整數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...