CodeForces 508C Anya and Ghosts 贪心

做不出题目,只能怪自己不认真


题目:

Click here

题意:

给你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;
}
posted @ 2015-08-08 15:59  TaoTaoCome  阅读(129)  评论(0编辑  收藏  举报