Educational Codeforces Round 45 E. Post Lamps

题目链接:E. Post Lamps

题解:用一个las数组保存当前位置可以左边包括自己离自己最近的位置,然后暴力求每个不同的灯至少需要多少个然后更新答案

#include<bits/stdc++.h>
#include<set>
#include<cstdio>
#include<iomanip>
#include<iostream>
#include<string>
#include<cstring>
#include<algorithm>
#define pb push_back
#define ll long long
#define fi first
#define se second
#define PI 3.14159265
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
#define eps 1e-7
#define pii pair<int,int>
typedef unsigned long long ull;
const int mod=1e3+5;
const ll inf=0x3f3f3f3f3f3f3f;
const int maxn=1e6+5;
using namespace std;
ll n,m,k,ans=inf;
bool vis[maxn];
int a[maxn],las[maxn];
int main()
{
    scanf("%d %d %d",&n,&m,&k);
    for(int i=0;i<m;i++)
    {
        int x;
        scanf("%d",&x);vis[x]=true;
    }
    int p=-1;
    for(int i=0;i<n;i++)
    {
        if(!vis[i])
        {
            las[i]=i;p=i;
        }
        else las[i]=p;
    }
    for(int i=1;i<=k;i++)
    {
        scanf("%d",&a[i]);
    }
    for(int i=1;i<=k;i++)
    {
        int pos=0,cnt=0;
        while(pos<n)
        {
           if(las[pos]>=0&&las[pos]+i>pos)
           {
               pos=las[pos]+i;cnt++;
           }
           else break;
        }
        if(pos>=n)ans=min(ans,1ll*cnt*a[i]);
    }
    if(ans<inf)
    {
        printf("%lld\n",ans);
    }
    else printf("-1\n");
}

猜你喜欢

转载自www.cnblogs.com/lhclqslove/p/9275671.html