CF1408D | 总结模型

CF1408D | 总结模型

分析:首先小偷要躲过每一个灯塔 小偷躲过一个灯塔只需要横坐标或纵坐标大于即可

想到可以处理处每个小偷相对每个灯塔最少移动步数<ax,ay>分别表示纵坐标或者横坐标移动数

一组<ax,ay>只需要我们满足其中一个即可 这就回到一个模型上面

转化到这个模型上面还是有一定的难度的

https://zhuanlan.zhihu.com/p/268630329

#include<bits/stdc++.h>using namespace std;#define lowbit(x) x&(-x)#define ll long longconst int maxn=2005;const int maxx=4e6+5;int n,m,cnt,tot;struct node{int x,y;}a[maxn],b[maxn],res[maxx],ans[maxn];bool cmp(node aa,node bb){if(aa.x!=bb.x)return aa.x<bb.x;return aa.y<bb.y;}int main(){cin>>n>>m;for(int i=1;i<=n;i++)scanf("%d%d",&a[i].x,&a[i].y);for(int i=1;i<=m;i++)scanf("%d%d",&b[i].x,&b[i].y);    for(int i=1;i<=n;i++){for(int j=1;j<=m;j++)    {int len1=b[j].x-a[i].x+1;int len2=b[j].y-a[i].y+1;if(len1<=0||len2<=0)continue;res[++tot].x=len1;res[tot].y=len2; }}sort(res+1,res+1+tot,cmp);int pre=-1;for(int i=tot;i>=1;i--)if(res[i].y>pre){ans[++cnt].x=res[i].x;ans[cnt].y=res[i].y;pre=res[i].y;}int sum=1e9;for(int i=1;i<=cnt+1;i++)sum=min(sum,ans[i].x+ans[i-1].y);cout<<sum<<endl;return 0;}
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部