爱丽丝要完成一项修剪灌木的工作。有 N 棵灌木整齐的从左到右排成一排。爱丽丝在每天傍晩会修剪一棵灌 木, 让灌木的高度变为 0 厘米。爱丽丝修剪灌木的顺序是从最左侧的灌木开始, 每天向右修剪一棵灌木。当修剪了最右侧的灌木后, 她会调转方向, 下一天开 始向左修剪灌木。直到修剪了最左的灌木后再次调转方向。然后如此循环往复。
灌木每天从早上到傍晩会长高 1 厘米, 而其余时间不会长高。在第一天的 早晨, 所有灌木的高度都是 0 厘米。爱丽丝想知道每棵灌木最高长到多高。
输入格式
一个正整数 N, 含义如题面所述。
输出格式
输出 N 行, 每行一个整数, 第 i 行表示从左到右第 i 棵树最高能长到多高。
样例输入
3
样例输出
4
2
4
评测用例规模与约定
对于 30% 的数据, 1<N≤10.
对于 100% 的数据, 1<N≤10000.
运行限制
- 最大运行时间:1s
- 最大运行内存: 512M
#include <iostream> #include <algorithm> using namespace std; int main() { int N; cin >> N; for (int i = 0; i < N; i++) { cout << 2 * max(i, N - i - 1)<<endl; } return 0; }
数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一 部分的数列,只记得其中 N 个整数。
现在给出这 N 个整数,小明想知道包含这 N 个整数的最短的等差数列有几项?
输入描述
输入的第一行包含一个整数 N。
第二行包含 N 个整数 A1,A2,⋅⋅⋅,AN。(注意 A1 ∼AN 并不一定是按等差数列中的顺序给出)
输出描述
输出一个整数表示答案。
输入输出样例
示例
输入
5 2 6 4 10 20
输出
10
样例说明: 包含 2、6、4、10、20 的最短的等差数列是 2、4、6、8、10、12、14、16、 18、20。
运行限制
- 最大运行时间:1s
- 最大运行内存: 256M
#include <iostream> #include <algorithm> using namespace std; long long A[100001]; int gcd(int m, int n) { if (m < n) { int temp = m; m = n; n = temp; } if (n == 0)return m; else return gcd(n, m % n); } int main() { int n; cin >> n; for (int i = 0; i < n; i++) { cin >> A[i]; } sort(A, A + n); int d = A[1] - A[0]; for (int i = 1; i < n - 1; i++) { d = gcd(A[i + 1] - A[i], d); } if (A[0] == A[n - 1])cout << n << endl; else { cout<<(A[n - 1] - A[0]) / d + 1<<endl; } return 0; }
- 最大运行内存: 512M