题解:CF1118D1 Coffee and Coursework (Easy version)
题目大意
题目传送门
Polycarp 有
同时,他还有
每一天可以选择喝任意杯咖啡
Polycarp 想知道,至少需要多少天他才能完成这所有的
思路
我们可以用模拟的方法,来暴力模拟。时间复杂度是
代码
#include<bits/stdc++.h>
using namespace std;
int a[105];
bool cmd(int x,int y){
return x>y;
}
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+1+n,cmd);
for(int i=1;i<=n;i++){
int sum=0;
for(int j=1;j<=i;j++){
int idx=j+i;
sum+=a[j];
int id=1;
while(1){
if(idx>n){
break;
}
if(max(a[idx]-id,0)==0)break;
sum+=a[idx]-id;
idx+=i;
id++;
}
}
if(sum>=m){
cout<<i;
return 0;
}
}
cout<<-1;
return 0;
}
很明显中间十分复杂,于是我们改了一下。 代码:
#include<bits/stdc++.h>
using namespace std;
int a[105];
bool cmd(int x,int y){
return x>y;
}
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+1+n,cmd);
for(int i=1;i<=n;i++){
int sum = 0;
int k = -1;
for(int j = 1 ; j <= n ; j++){
if((j-1)%i == 0){
k++;
}
sum += max(a[j]-k,0);
}
if(sum>=m){
cout<<i;
return 0;
}
}
cout<<-1;
return 0;
}
推荐习题
Coffee and Coursework (Hard Version) 需要使用二分!!!