CF1253E Antenna Coverage
Posted Jozky86
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CF1253E Antenna Coverage相关的知识,希望对你有一定的参考价值。
题意:
现在有n个点,每个点的坐标为xi,以及一个范围值si,可以覆盖左右范围[xi-si,xi+si]
每次操作,可以花费代价1让第i个天线的si增加1,每个天线都可以进行多次操作。现在请问你最少需要花费多少代码,使得[1,m]内每个位置都被至少一个天线覆盖
题解:
参考题解
很奇妙的思路
我们设f[i]表示[1,i]被全部覆盖的最小花费,答案为
f
m
f_{m}
fm
首先引入一个新的点,坐标为0,这样f的初始值就是f[i]=i
这个点很重要,其保证了
f
i
+
1
<
=
f
i
+
1
f_{i+1}<=f_{i}+1
fi+1<=fi+1,f是单调上升的,且该点的引入并未影响答案,因为我们最后的答案是f[n],而在最左侧加入一个点,f[n]=n相当于是最差情况,所以不会影响答案
然后我们可以进行转移:
对于点i,我们找在i前面的区间[l,r],(r要小于i),此时r要扩展x=i-r[]才能覆盖i,l也要扩展x,那么i就可以通过坐标j-1=l-x-1来更新
如图
正确性证明可以看参考题解
代码:
#include <bits/stdc++.h>
#include <unordered_map>
#define debug(a, b) printf("%s = %d\\n", a, b);
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> PII;
clock_t startTime, endTime;
//Fe~Jozky
const ll INF_ll= 1e18;
const int INF_int= 0x3f3f3f3f;
void read(){};
template <typename _Tp, typename... _Tps> void read(_Tp& x, _Tps&... Ar)
{
x= 0;
char c= getchar();
bool flag= 0;
while (c < '0' || c > '9')
flag|= (c == '-'), c= getchar();
while (c >= '0' && c <= '9')
x= (x << 3) + (x << 1) + (c ^ 48), c= getchar();
if (flag)
x= -x;
read(Ar...);
}
template <typename T> inline void write(T x)
{
if (x < 0) {
x= ~(x - 1);
putchar('-');
}
if (x > 9)
write(x / 10);
putchar(x % 10 + '0');
}
void rd_test()
{
#ifdef ONLINE_JUDGE
#else
startTime = clock ();
freopen("data.in", "r", stdin);
#endif
}
void Time_test()
{
#ifdef ONLINE_JUDGE
#else
endTime= clock();
printf("\\nRun Time:%lfs\\n", (double)(endTime - startTime) / CLOCKS_PER_SEC);
#endif
}
const int maxn=100;
struct node{
int x,s;
}a[maxn];
int f[200004];
int l[maxn];
int r[maxn];
int main()
{
// rd_test();
int n,m;
read(n,m);
for(int i=1;i<=n;i++){
read(a[i].x,a[i].s);
l[i]=a[i].x-a[i].s;
r[i]=a[i].x+a[i].s;
}
for(int i=1;i<=m;i++)f[i]=i;
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++){
if(l[j]<=i&&i<=r[j]){
f[i]=f[i-1];
break;
}
if(r[j]<i){
int x=i-r[j];
f[i]=min(f[max(0,l[j]-x-1)]+x,f[i]);
}
}
}
cout<<f[m];
//Time_test();
}
以上是关于CF1253E Antenna Coverage的主要内容,如果未能解决你的问题,请参考以下文章
[Codeforces 1253E] Antenna Coverage
Codeforces Round #600 (Div. 2) E. Antenna Coverage
java作业写作代写Control Flow Oriented Coverage Test Procedure
Java程序代写代做|代写JAVA代码|帮做java编程: Control Flow Oriented Coverage Test Procedures