2017百度之星资格赛 1001/hdu 6080 度度熊保护村庄

  • 题目
  • 解析
  • 代码

题目

Problem Description

哗啦啦村袭击了喵哈哈村!

度度熊为了拯救喵哈哈村,带着自己的伙伴去救援喵哈哈村去了!度度熊与伙伴们很快的就过来占据了喵哈哈村的各个军事要地,牢牢的守住了喵哈哈村。

但是度度熊发现,这是一场旷日持久的战斗,所以度度熊决定要以逸待劳,保存尽量多的体力,去迎战哗啦啦村的战士。

于是度度熊决定派尽量多的人去休息,但是同时也不能松懈对喵哈哈村的保护。

换句话而言,度度熊希望尽量多的人休息,而且存在一个包围圈由剩下的人组成,且能够恰好的包围住喵哈哈村的所有住房(包括边界)。

请问最多能让多少个人休息呢?
Input

本题包含若干组测试数据。

第一行一个整数n,表示喵哈哈村的住房数量。

接下来n行,每行两个整数(x1[i],y1[i]),表示喵哈哈村的住房坐标。

第n+1行一个整数m,表示度度熊的士兵数量。

接下来m行,每行两个整数(x2[i],y2[i]),表示度度熊伙伴的坐标。

满足:

1<=n,m<=5001<=n,m<=5001<=n,m<=500

−10000<=x1[i],x2[i],y1[i],y2[i]<=10000-10000<=x1[i],x2[i],y1[i],y2[i]<=10000−10000<=x1[i],x2[i],y1[i],y2[i]<=10000
Output

请输出最多的人员休息的数目。

如果无法保护整个村庄的话,输出"ToT"
Sample Input

2
1 1
2 2
4
0 0
0 4
4 2
4 0
1
1 1
2
0 0
0 1

Sample Output

1
ToT

解析

把度度熊和它的伙伴们当成黑点,所有的村庄当成红点

考虑对所有的黑点建图

O(n²)暴力枚举所有的黑点点对,对于每个点对(a, b),O(n)检测所有红点

如果所有的红点都在点对(a, b)(a->b)的右侧,则a到b连接一条长度为1的单向边

如果所有的红点都在点对(a, b)(a->b)的左侧,则b到a连接一条长度为1的单向边

否则a和b不连边

具体如何判定?假设当前便利到黑点a和b,红点为c

红点c在a和b(a->b)的右侧则有
(b−a)×(c−a)<0(b-a)\times(c-a)<0(b−a)×(c−a)<0

同理大于0说明在左侧,等于0说明三点共线

(注意三点共线的时候,如果c点在a和b的线段上直接连双向边,否则不连边)

之后可以得到一张图G

很好想到图中最小的环就是最优方案,令road[a][b]为点a到点b的最短路

跑一边floyd就好了,答案就是黑点个数m-min(road[i][i]) (1<=i<=m)

当然如果这个图中都不存在环,那么说明无法保护整个村庄,输出ToT。

卡常……火车头伺候(虽然我还没写)。

代码

#include<bits/stdc++.h>
using namespace std;
const int INF=0x3f3f3f3f;
struct Point{int x,y;Point operator-(const Point &rhs)const {Point c;c.x=x-rhs.x;c.y=y-rhs.y;}double operator *(const Point &rhs)const {return x*rhs.y-y*rhs.x;}
}Po,h[505],s[505];
int n,m,ans,road[505][505];
bool Check(Point x,Point y,Point z)
{if((x.x<z.x && y.x<z.x) || (x.y<z.y && y.y<z.y) || (x.x>z.x && y.x>z.x) || (x.y>z.y && y.y>z.y)){return true;}return false;
}
int main()
{int flag;while(scanf("%d",&n)!=EOF){memset(road,0x3f,sizeof(road));for(int i=1;i<=n;i++){scanf("%d%d",&h[i].x,&h[i].y);}scanf("%d",&m);for(int i=1;i<=m;i++){scanf("%d%d",&s[i].x,&s[i].y);}for(int i=1;i<=m;i++){for(int j=1;j<=m;j++){flag=true;for(int k=1;k<=n;k++){if((s[i]-s[j])*(s[i]-h[k])<0 || (s[i]-s[j])*(s[i]-h[k])==0 && Check(s[i],s[j],h[k])){flag=0;break;}}if(flag)road[i][j] = 1;}}ans=INF;for(int k=1;k<=m;k++){for(int i=1;i<=m;i++){if(road[i][k]==INF)continue;for(int j=1;j<=m;j++)road[i][j]=min(road[i][j],road[i][k]+road[k][j]);}}for(int i=1;i<=m;i++)ans=min(ans,road[i][i]);if(ans>m)printf("ToT\n");elseprintf("%d\n",m-ans);}return 0;
}

2017百度之星资格赛 1001/hdu 6080 度度熊保护村庄相关推荐

  1. hdu 6080 度度熊保护村庄

    题意 哗啦啦村袭击了喵哈哈村! 度度熊为了拯救喵哈哈村,带着自己的伙伴去救援喵哈哈村去了!度度熊与伙伴们很快的就过来占据了喵哈哈村的各个军事要地,牢牢的守住了喵哈哈村. 但是度度熊发现,这是一场旷日持 ...

  2. 找规律 百度之星资格赛 1001 大搬家

    题目传送门 1 /* 2 找规律:题目真心读不懂,排列组合的题目 3 */ 4 #include <cstdio> 5 #include <iostream> 6 #inclu ...

  3. 2017百度之星资格赛—1003度度熊与邪恶大魔王

    其他题目就不发博客了(有些也没做出来!!),感觉这次百度之星资格赛题目数据有毒,吐槽,其他题目也不好说,感觉这个题目正常点. 这个题目我当时想到的就是动态规划,但是评论中很多人说是贪心,我一直不理解, ...

  4. HDU - 6344 2018百度之星资格赛 1001调查问卷(状压dp)

    调查问卷  Accepts: 1289  Submissions: 5642  Time Limit: 6500/6000 MS (Java/Others)  Memory Limit: 262144 ...

  5. 【2012百度之星/初赛下】C:度度熊的礼物

    描述:度度熊拥有一个自己的Baidu空间,度度熊时不时会给空间朋友赠送礼物,以增加度度熊与朋友之间的友谊值.度度熊在偶然的机会下得到了两种超级礼物,于是决定给每位朋友赠送一件超级礼物.不同类型的朋友在 ...

  6. 2017百度之星资格赛:1001. 度度熊保护村庄(floyd最小环)

    度度熊保护村庄  Accepts: 26  Submissions: 677  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 32768/ ...

  7. 2014百度之星资格赛 1001:Energy Conversion(水题,逻辑题)

    Energy Conversion Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  8. 2017百度之星资格赛 1003 度度熊与邪恶大魔王

    本题我们可以类比背包 背包dp[i][j] 表示再有i个物品下j个空间所获得的最大价值 本题dp[i][j] 可以表示干掉i个血量j个防御力下的最小花费 我们看其实我们就是在不同血量之间转移 如果当前 ...

  9. 百度之星资格赛,hdu 4825 XOR SUM

    显然是要建一棵0.1树 事实上非常easy就是二叉树,仅仅只是为了操作简便,即程序的速度,所以就採用静态树,即不动态分配内存,使用较大的全局数组.0是根节点 #include<cstdio> ...

  10. 2017百度之星资格赛:1005. 寻找母串(卡特兰数+分块打表)

    寻找母串  Accepts: 105  Submissions: 887  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 32768/32 ...

最新文章

  1. 蚂蚁上市后,马云不是最大赢家,竟是她!
  2. 2018/11/11蓝桥杯Java培训
  3. PAT甲级1144 The Missing Number:[C++题解]哈希表
  4. 使用python连接数据库
  5. retrofit 解析百度地图api 返回数据_阿里二面:关于 Retrofit 你知道多少?看完你的offer稳了
  6. 数学图形(1.42)拱形曲线
  7. jmx 替代_使用JMX作为Ganglia的现代替代品进行CLDB监视
  8. 实时监听input输入框value的变化:
  9. NetCore NW714 v2.0路由器TTL救砖
  10. vue的activated和deactivated生命周期
  11. ASP.Net学习笔记012--12ViewState初探
  12. 9.企业安全建设指南(金融行业安全架构与技术实践) --- 安全认证
  13. XPath总结(转)
  14. wsdl2java 命令 服务端_使用Axis2中的工具wsdl2Java的生成客户端和服务端代码
  15. 计算机视频剪辑教程,电脑怎么剪辑视频?新手都能上手的视频剪辑教程分享
  16. java算法编程题:计算球的体积
  17. iOS汉字字符串转拼音
  18. win10键盘错乱如何恢复--win7w.com
  19. c语言双字节异或,C语言 按位异或实现加法
  20. ROS 几款IDE,一些小坑

热门文章

  1. Fortran的全局变量(Common blocks)
  2. 2021-08-18 HarmonyOS实战 CommonDialog的使用
  3. FBEC2020 | 贾瑶琪:打造区块链项目最好的方式,是打造开源的系统
  4. 中外多角度破题司法判决“执行难”
  5. 支付宝小程序芝麻信用分授权配置
  6. java调用js tel,jQuery国际电话区号选择插件intlTelInput.js
  7. ARM920T的MMU
  8. android 谷歌支付流程,谷歌支付怎么用 谷歌androidpay无需手机操作流程
  9. 君正X1000串口流控bug
  10. 哔哩哔哩2020届秋招数据分析师面试第一轮(2019.8.8)