CodeForces 508C Anya and Ghosts 贪心
做不出题目,只能怪自己不认真
题目:
题意:
给你3个数m,t,r分别表示鬼的数量,每只蜡烛持续燃烧的时间,每个鬼来时要至少亮着的蜡烛数量,接下来m个数分别表示每个鬼来的时间点(増序)。输出至少要点多少只蜡烛,不能完成输出-1。注意t时刻点蜡烛,t+1时刻才管用。并且一个时间点只能点一支蜡烛
分析:
很明显的贪心,就尽可能晚的点蜡烛,能少点就少点。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int M = 3e2+5;
int m, t, r;
int w[M]; //鬼出现的时间
int vis[M]; //表示i时刻亮着的蜡烛的数量
int main() {
while( ~scanf("%d%d%d", &m, &t, &r ) ) {
for( int i=0; i<m; i++ )
scanf("%d", w+i );
if( t < r ) { //这种情况就是一个时间点最多t个蜡烛亮着,但却需要至少r个蜡烛
printf("-1\n");
continue;
}
memset( vis, 0, sizeof(vis) );
int cnt = 0;
for( int i=0; i<m; i++ ) {
int c = r - vis[w[i]];
if( c > 0 ) {
cnt += c;
for( int j=0; j<c; j++ ) {
for( int k=w[i]-j; k<w[i]-j+t;k++ ) {
if( k<0 || k>300 )
continue;
vis[k]++;
}
}
}
}
printf("%d\n", cnt );
}
return 0;
}