CF990E
分析
坑点:
(你需要覆盖整个区间,而非只覆盖整数点,例如
翻译没把这个写上去,搞得我思考了很久样例。看到这个之后,题目可以转化为每个灯可以覆盖
如果没有障碍物,我们直接枚举每个灯放哪,复杂度
AC Code
#include <bits/stdc++.h>
using namespace std;
#define int long long
int a[1000010],n,m,k,s[1000010],pre[1000010],mp[1000010];
inline int read()
{
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-') f=-1;
ch = getchar();
}
while(ch>='0'&&ch<='9')
{
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*f;
}
inline void write(int x)
{
if(x<0) putchar('-'),x=-x;
if(x>9) write(x / 10);
putchar(x%10+'0');
return;
}
int add(int l)
{
int ret=0;
for(int i=0;i<n;i+=l)
{
ret++;
if(mp[i]) i=pre[i];
}
return ret;
}
signed main()
{
n=read();m=read();k=read();
if(n==m)
{
puts("-1");
return 0;
}
s[0]=-1e18;
for(int i=1;i<=m;i++)
{
s[i]=read();
mp[s[i]]=1;
if(!s[i])
{
puts("-1");
return 0;
}
}
for(int i=1;i<=k;i++) a[i]=read();
for(int i=1;i<=n;i++) pre[i]=(mp[i-1]?pre[i-1]:i-1);
int tp=1,maxt=0;
for(int i=1;i<=m;i++)
{
if(s[i]!=s[i-1]+1) tp=1;
else tp++;
maxt=max(maxt,tp);
}
if(maxt+1>k)
{
puts("-1");
return 0;
}
int ans=1e18;
for(int i=maxt+1;i<=k;i++) ans=min(ans,add(i)*a[i]);
write(ans);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】