題意:
結界給出乙個數n。你要求一段連續的數,這些數的平方和等於n。
input
輸入乙個整數n,1<=n<=10^14;
output
輸出乙個數k,k為解的個數。接下來的k行為解,每一行的解要先輸出這個解中包含的數字個數,然後從小到大輸出解中包含的數字。解的輸出順序要按照所包含的數字個數降序排列。
sample input
2030sample 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 ...