(288C)codeforce

这个题我最开始真的是写麻烦了,其实想法确实一样的,问你在保证每个鬼过来的时候有r个蜡烛在燃烧,每个蜡烛的燃烧周期是t。

我们一个蜡烛一个蜡烛考虑就可以写了,把第i个蜡烛的 i+1个蜡烛考虑下就行

贴下我以前的代码····

#include<iostream>
#include<cstdio>
#include<string.h>
#include<string>
#include<set>
#include<algorithm>
#include<cmath>


#define ll __int64
#define MAX 1000009
using namespace std;


int a[MAX];
int b[MAX];
int main()
{
    int n,m,t,k;
    int sum = 0;
    cin>>n>>t>>k;
    for(int i = 0; i<n; i++)cin>>a[i];
    if(t<k)
    {
        cout<<-1<<endl;
        return 0;
    }
    for(int j = 0; j<k; j++)
    {
        b[j] = a[0] - k + j;
    }
    sum = k;
    for(int i = 1; i<n; i++)
    {
        for(int j = 0; j<k; j++)
        {
            if(b[j]<a[i])
            {
                m = 0;
                while(b[j]+m*(1+t)<a[i])
                {
                    m++;
                    sum++;
                }
                b[j] = b[j]+m*(1+t);
            }
        }


    }
    cout<<sum<<endl;
    return 0;
}

我错误的原因在于···我是判断的有多少个t+1的周期,实际上,你只需要看第i+1的蜡烛在鬼魂来之前的什么时候点亮就可以

再贴下正确的

#include<iostream>
#include<cstdio>
#include<string.h>
#include<string>
#include<set>
#include<algorithm>
#include<cmath>


#define ll __int64
#define MAX 1000009
using namespace std;


int a[MAX];
int b[MAX];
int main()
{
    int n,m,t,k,r;
    int i,j;
    int sum = 0;
    cin>>n>>t>>r;
    if(t<)
    {
        cout<<-1<<endl;
        return 0;
    }
    for(int i = 0; i<n; i++)
    {
        cin>>a[i];
        k = 0;
        while((b[a[i]])<r)
        {
            for(j = a[i]; j<a[i]+t-k; j++)
                b[j]++;
            k++;
            sum++;
        }
    }
    cout<<sum<<endl;
    return 0;
}
/*
4 8 3
5 8 10 26
*/

超级简单····

还是要以蜡烛考虑

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值