POJ 2100(尺取法 巢狀pair)

2021-08-26 20:27:34 字數 894 閱讀 2722

題意:

結界給出乙個數n。你要求一段連續的數,這些數的平方和等於n。

input

輸入乙個整數n,1<=n<=10^14;

output

輸出乙個數k,k為解的個數。接下來的k行為解,每一行的解要先輸出這個解中包含的數字個數,然後從小到大輸出解中包含的數字。解的輸出順序要按照所包含的數字個數降序排列。

sample input

2030
sample output

2

4 21 22 23 24

3 25 26 27

思路:

首先,不能打表,會mle。看了別人的用pair>這個高大上的東西來儲存答案,學習了!因為尺取法是讓r從開頭加到sum>n,所以答案的順序已經是降序了。

#include#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;

#define inf 0x3f3f3f3f

#define ll long long

const ll maxn=1e14+5;

const double eps=1e-8;

const double pi = acos(-1.0);

#define p pair>

p ans[1010];

int main()

sum-=l*l;

l++;

}printf("%d\n",k);

for(int i=0;iputs("");}}

return 0;

}

poj 2100 尺取法(尺度法)

給你乙個數n,然後找到乙個連續的序列,使得這個序列中的數的平方和等於n。輸出需要注意的是第一行為解的個數,剩下的每行先輸出序列的長度,然後輸出序列。按照序列的長度進行降序輸出。沒啥好說的,使用尺度法,進行列舉各個區間上的數。需要注意的是數字1的答案為 1 1 1 include include in...

poj 2100 尺取法連續平方和

題意 給乙個數 n 1e14 求一段連續的數的數字,使得其平方和等於n。輸出的時候,先輸出有多少組,然後每組的開頭輸出有多少個元素,然後輸出這些元素。解析 尺取法。需要注意的地方是s和t要從1開始,否則wa。include include include include include includ...

POJ2566(尺取法 字首和)

題意 給出乙個整數列,求一段子串行之和最接近所給出的t。輸出該段子序列之和及左右端點。思路 做這道題其實是沒思路的,看了大佬的題解後學習到了。一般來說,我們必須要保證數列單調性,才能使用尺取法。預處理出前i個數的字首和,和編號i一起放入pair中,然而根據字首和大小進行排序。由於abs sum i ...