noip模拟赛 whzzt-Conscience
2024-08-31 00:55:59
分析:数据中并不存在无解的情况......
每个摄像头都要覆盖尽可能多的点,按照y从小到大排序.对于每一列,只用判断第一个没有被观测到的就可以了,这个点必须要放摄像头,因为除了它自己没有其它的摄像头能观测到它了,如果它的下面有摄像头没有覆盖到,那么它就必须要观测下面,否则观测右边是最优的.
以为会爆炸的,结果A了......
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; int T, n, m, q, visx[], visy[], ans, cantx[], canty[];
bool flag2 = false; struct node
{
int x, y;
}e[]; bool cmp(node a, node b)
{
if (a.y == b.y)
return a.x < b.x;
return a.y < b.y;
} int main()
{
scanf("%d", &T);
while (T--)
{
ans = ;
memset(visx, , sizeof(visx));
memset(visy, , sizeof(visy));
memset(cantx, , sizeof(cantx));
memset(canty, , sizeof(canty));
scanf("%d%d%d", &n, &m, &q);
for (int i = ; i <= q; i++)
scanf("%d%d", &e[i].x, &e[i].y);
sort(e + , e + + q, cmp);
for (int i = ; i <= q; i++)
{
if (!cantx[e[i].x] && !canty[e[i].y] && !visx[e[i].x] && !visy[e[i].y])
{
bool flag = false;
for (int j = i + ; e[j].y == e[i].y; j++)
{
if (!visx[e[j].x])
{
flag = true;
break;
}
}
if (flag)
visy[e[i].y] = ;
else
visx[e[i].x] = ;
cantx[e[i].x] = canty[e[i].y] = ;
ans++;
}
}
printf("%d\n", ans);
} return ;
}
最新文章
- UEditor编辑器使用示例
- php简单实现socket通信
- ui-router带参数的ui-sref配置
- IBM云的商业动作之我见(1):IBM 收购 OpenStack 托管私有云公司 Blue Box [IBM Acquired Blue Box]
- PO、VO、DAO、BO、POJO
- [游戏模版15] Win32 飞机射击
- 九度OJ 1118 数制转换
- Qt程序开机启动的怪现象————无法正常显示程序皮肤
- Android Animation学习(二) ApiDemos解析:基本Animatiors使用
- Atitit.软件GUIbutton和仪表板(01)--警报系统--
- bzoj2748
- 【RNN】资源汇总
- Windows查看Java内存使用情况
- 洛谷1894 [USACO4.2]完美的牛栏The Perfect Stall
- dos常用命令使用说明
- markdown 语法简要备忘
- 简单线性dp
- 线程(Thread)和异常
- 第2章、数据与简单计算程序(c语言入门)
- Oracle行转列,pivot函数和unpivot函数
热门文章
- bzoj 1690: [Usaco2007 Dec]奶牛的旅行【01分数规划+spfa】
- P3990 [SHOI2013]超级跳马
- [App Store Connect帮助]六、测试 Beta 版本(2)输入测试信息以供外部测试
- Moco模拟服务器post&;get请求 (二)
- Nginx(三) 常用配置整理
- 微信小程序去除button边框
- ibatis入门教程一
- 预采订单管理接收来源App数据
- oa系统部署
- Handling unhandled exceptions and signals