OCAC暑期比赛第二场 B题 日常浇花 题解
Posted ocac
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OCAC暑期比赛第二场 B题 日常浇花 题解相关的知识,希望对你有一定的参考价值。
日常浇花
原题链接:http://codeforces.com/problemset/problem/149/A
【题目描述】
2018年12月31号晚,当聪聪的父母给阳台上的花浇完水之后,这对夫妻准备去南极看极光,并且在2020年1月1号的早上再回家。
他们留下了聪聪一个人在家,并且给聪聪布置了一项任务:浇花!
聪聪知道,在第i个月,如果它坚持给花每天早上、中午、晚上各浇一次水,那么在月底的时候这朵花就会长高ai厘米;
如果在第i个月,聪聪没有坚持做到这一点的话(比如哪天早上睡过头了),月底的时候这朵花就不会长高。
聪聪知道,如果在爸妈回来的时候,花长高的高度小于 k 厘米,它的爸妈就会发现他没有好好浇花。
请问聪聪最少需要浇几个月的花,使得花增长的高度能够大于等于 k 厘米(也就是说:爸妈回来之后发现花长高了至少k厘米)。
【输入格式】
输入的第一行包含一个整数k(0<=k<=100)。
输入的第二行包含12个整数,两个正数之间以一个空格分隔,其中第i个整数用于表示ai(1<=ai<=100)。
【输出格式】
输出包含一个整数,用于表示聪聪最少需要浇花的月数。
如果聪聪无论怎样都无法让花增长至少 k 厘米,输出 -1。
【样例输入1】
5
1 1 1 1 2 2 3 2 2 1 1 1
【样例输出1】
2
【样例输入2】
0
0 0 0 0 0 0 0 1 1 2 3 0
【样例输出2】
0
【样例输入3】
11
1 1 4 1 1 5 1 1 4 1 1 1
【样例输出3】
3
【题目分析】
本题涉及算法:贪心。
我们只需要设一个变量tot,tot初始等于0,
然后对数组 a 从大到小进行排序,然后依次将数组 a 中的值加入到 tot ,知道 tot >= k。
如果 k == 0,那么聪聪就不需要浇花,直接输出0;
如果遍历结束的时候 tot 还是小于 k,那么输出-1。
实现代码如下:
#include <bits/stdc++.h> using namespace std; int k, tot, a[12]; inline bool cmp(int a, int b) return a > b; int main() cin >> k; for (int i = 0; i < 12; i ++) cin >> a[i]; sort(a, a+12, cmp); if (k == 0) cout << 0 << endl; return 0; for (int i = 0; i < 12; i ++) tot += a[i]; if (tot >= k) cout << i + 1 << endl; return 0; cout << -1 << endl; return 0;
以上是关于OCAC暑期比赛第二场 B题 日常浇花 题解的主要内容,如果未能解决你的问题,请参考以下文章