以及 前缀和算法 的入门 题目链接:https://www.luogu.com.cn/problem/P1147 题目描述 对一个给定的正整数MM,求出所有的连续的正整数段(每一段至少有两个数),这些连续的自然数段中的全部数之和为MM。 例子:1998+1999+2000+2001+2002=100001998+1999+2000+2001+2002=10000,所以从19981998到20022002的一个自然...
洛谷P1147连续自然数和(前缀和) 题目描述 对一个给定的自然数MMM,求出所有的连续的自然数段,这些连续的自然数段中的全部数之和为MMM。 例子:1998+1999+2000+2001+2002=100001998+1999+2000+2001+2002 = 100001998+1999+2000+2001+2002=10000,所以从199819981998到200220022002的一个自然数段为M=10000M=10000M=1...
1)暴力,直接暴力枚举咯,如果能够成功,输出,不能,看下一个数行不行 (因为区间左端点最多能够到给出数的一半,可以手动计算一下~,右端点的话,也最多是能到一半+1) 2)运用超好用的前缀和(注意这里需要进行剪枝,即[if(sum[j]-sum[i-1]>M) break;],这样才不至于一直进行一些无用的操作,然后TLE) 代码酱...
int main() { LL n; cin >> n; //预处理前缀和 for (int i = 1; i <= n; i++) s[i] = s[i - 1] + i; // 如果我们预处理出来了s数组,那么两个变量[x,y],通过枚举y --> i 从 1~ n/2 // ∵s[x] - s[y-1] = n // ∴s[x] = s[y-1] + n int m = n >> ...
洛谷P1147 连续自然数和 题目解法: 这题是个大水题,但是我们看到了两种解法: 法一①:考虑前缀和做法。 首先我们读题,发现其要求的是连续自然数和。连续自然数和,那么我们可以用前缀和来处理这些自然数的和。于是我们得到了一个显然的做法:(30pts)直接枚举。
题目描述 对一个给定的自然数M,求出所有的连续的自然数段,这些连续的自然数段中的全部数之和为M。 例子:1998+1999+2000+2001+2002 = 10000,所以从1998到2002的一个自然数段为M=10000的一个解。 输入输出格式 输入格式: 包含一个整数的单独一行给出M的值(10
P1147 连续自然数和 题目描述 对一个给定的自然数M,求出所有的连续的自然数段,这些连续的自然数段中的全部数之和为M。 例子:1998+1999+2000+2001+2002 = 10000,所以从1998到2002的一个自然数段为M=10000的一个解。 输入输出格式 输入格式: 包含一个整数的单独一行给出M的值(10 <= M <= 2,000,000)...
P1147 连续自然数和 题目描述 对一个给定的自然数 M ,求出所有的连续的自然数段,这些连续的自然数段中的全部数之和为 M 。 Solution 两点问题 弄两个点l,rl,r, 因为前缀和有单调性, 所以我们不断地调整l,rl,r来接近所给数 当发现调整完一次后刚好等于所给数, 输出即可, 复杂度O(n)O(n) ...