题目描述:
题目解读:
给定n,k
数组a是由0和1组成的,长度为n的数组,数组满足:
a的前i个元素中至少有i/k个等于1;
a的后i个元素中至少有i/k个等于1;
输入n,k
输出满足条件的数组的1的最小个数;
解题思路:
如果 k 是 1 ,那所有元素必须都为 1 才能满足;
如果 k 不为 1 ,要使 1 最少,则要尽量均摊使用 1 。
前 k 个元素当中,第一个元素是 1 即可,由前后双条件的限制,数列要是对称的,因此所求的数应为ceil((n + k - 1) / k).
代码实现:
#define _CRT_SECURE_NO_WARNINGS 1
#include<math.h>
#include<iostream>
#include <stdio.h>
using namespace std;
void Solve() {
double n, k;
cin >> n >> k;
if (k == 1) {
cout << n << endl;
return;
}
cout << ceil((n + k - 1) / k) << endl;
}
int main() {
int t;
scanf("%d", &t);
while (t--) Solve();
return 0;
}
遇到的错误: