任意门:http://codeforces.com/contest/1118/problem/D1

D1. Coffee and Coursework (Easy version)
time limit per test

1 second

memory limit per test

256 megabytes

input

standard input

output

standard output

The only difference between easy and hard versions is the constraints.

Polycarp has to write a coursework. The coursework consists of mm pages.

Polycarp also has nn cups of coffee. The coffee in the ii-th cup has aiai caffeine in it. Polycarp can drink some cups of coffee (each one no more than once). He can drink cups in any order. Polycarp drinks each cup instantly and completely (i.e. he cannot split any cup into several days).

Surely, courseworks are not usually being written in a single day (in a perfect world of Berland, at least). Some of them require multiple days of hard work.

Let's consider some day of Polycarp's work. Consider Polycarp drinks kk cups of coffee during this day and caffeine dosages of cups Polycarp drink during this day are ai1,ai2,…,aikai1,ai2,…,aik. Then the first cup he drinks gives him energy to write ai1ai1 pages of coursework, the second cup gives him energy to write max(0,ai2−1)max(0,ai2−1) pages, the third cup gives him energy to write max(0,ai3−2)max(0,ai3−2) pages, ..., the kk-th cup gives him energy to write max(0,aik−k+1)max(0,aik−k+1) pages.

If Polycarp doesn't drink coffee during some day, he cannot write coursework at all that day.

Polycarp has to finish his coursework as soon as possible (spend the minimum number of days to do it). Your task is to find out this number of days or say that it is impossible.

Input

The first line of the input contains two integers nn and mm (1≤n≤1001≤n≤100, 1≤m≤1041≤m≤104) — the number of cups of coffee and the number of pages in the coursework.

The second line of the input contains nn integers a1,a2,…,ana1,a2,…,an (1≤ai≤1001≤ai≤100), where aiai is the caffeine dosage of coffee in the ii-th cup.

Output

If it is impossible to write the coursework, print -1. Otherwise print the minimum number of days Polycarp needs to do it.

Examples
input

Copy
5 8
2 3 1 1 2
output

Copy
4
input

Copy
7 10
1 3 4 2 1 4 2
output

Copy
2
input

Copy
5 15
5 5 5 5 5
output

Copy
1
input

Copy
5 16
5 5 5 5 5
output

Copy
2
input

Copy
5 26
5 5 5 5 5
output

Copy
-1
Note

In the first example Polycarp can drink fourth cup during first day (and write 11 page), first and second cups during second day (and write 2+(3−1)=42+(3−1)=4 pages), fifth cup during the third day (and write 22 pages) and third cup during the fourth day (and write 11 page) so the answer is 44. It is obvious that there is no way to write the coursework in three or less days in this test.

In the second example Polycarp can drink third, fourth and second cups during first day (and write 4+(2−1)+(3−2)=64+(2−1)+(3−2)=6 pages) and sixth cup during second day (and write 44 pages) so the answer is 22. It is obvious that Polycarp cannot write the whole coursework in one day in this test.

In the third example Polycarp can drink all cups of coffee during first day and write 5+(5−1)+(5−2)+(5−3)+(5−4)=155+(5−1)+(5−2)+(5−3)+(5−4)=15pages of coursework.

In the fourth example Polycarp cannot drink all cups during first day and should drink one of them during the second day. So during first day he will write 5+(5−1)+(5−2)+(5−3)=145+(5−1)+(5−2)+(5−3)=14 pages of coursework and during second day he will write 55 pages of coursework. This is enough to complete it.

In the fifth example Polycarp cannot write the whole coursework at all, even if he will drink one cup of coffee during each day, so the answer is -1.

题意概括:

给出 N 杯咖啡所具有的能量值,和需要看完的书。

喝一杯咖啡可以获得一定的能量值,看一页书消耗一个能量值,在一天内喝多次咖啡效果会递减,求最少多少天可以看完所有的书

解题思路:

一开始看错题目。。。以为是要喝完全部的咖啡并且刚好凑足所需的能量值。。。。

其实就是一道贪心水题,因为没有规定要喝完,而且只要能量值大于等于所需能量值即可。

枚举所需的最小天数,第 K 大的数在第 K 天用这样达到的结果肯定是最优的。

如果全部能量值加起来都不够说明无解。

AC code:

 #include <bits/stdc++.h>
#define INF 0x3f3f3f3f
#define LL long long
using namespace std;
const int MAXN = ;
const int MAXM = 1e4+;
int num[MAXM];
int N, M;
bool cmp(int a, int b){return a > b;} int main()
{
int ans = ;
bool flag = false;
int tot = , cnt = ;
scanf("%d %d", &N, &M);
for(int i = ; i <= N; i++){
scanf("%d", &num[i]);
tot+=num[i];
}
if(tot < M) puts("-1");
else{
tot = ;
cnt = ;
sort(num+, num++N, cmp);
for(int ans = ; ans <= N; ans++){
tot = ;cnt = ;flag = false;
for(int i = ; i <= N; i++){
tot+=max(, num[i]-cnt);
if(i%ans == ) cnt++;
if(tot >= M){
flag = true;
break;
}
}
if(flag){
printf("%d\n", ans);
break;
}
}
}
return ;
}

最新文章

  1. lucene自定义过滤器
  2. homework-01
  3. JavaScript 全局属性/函数
  4. lua中的协程
  5. couchbase作为分布式session容器时的注意事项
  6. php分享三十三:用php中的register_shutdown_function和fastcgi_finish_request
  7. Mysql_mysql force Index 强制索引
  8. 关于self.用法的一些总结
  9. 基于Hadoop生态圈的数据仓库实践 —— ETL
  10. 内容替换Filter
  11. 电容式触摸控制器PCB布局
  12. 《css揭秘》
  13. 4、Spring+MyBatis增删改查
  14. 利用shell脚本监控目录内文件改动
  15. swift3.0 CoreGraphics绘图-实现画板
  16. 利用H5构建地图和获取定位地点
  17. java基础之IO流及递归理解
  18. FFmpeg开发实战(三):FFmpeg 打印音视频Meta信息
  19. 1080P60视频源---verilog
  20. Go语言之Interface(二)

热门文章

  1. uploadify 图片上传
  2. Node.js学习笔记(一) --- HTTP 模块、URL 模块、supervisor 工具
  3. Angular4 step by step.1
  4. 超时重试(一)ajax
  5. Java 基础 内部类
  6. Angularjs ngTable使用备忘
  7. SQLServer导入大sql文件报错 对 COM 组件的调用返回了错误 HRESULT E_FAIL。 (mscorlib)
  8. Java从入门到精通——数据库篇Mongo DB 导出,导入,备份
  9. daemontools检测进程,退出拉起
  10. python 进程池的使用