0
点赞
收藏
分享

微信扫一扫

三条线(春季每日一题 59)


农夫约翰想用他购买的新监视系统监视他的

头奶牛位于具有整数坐标的位置

没有两头奶牛占据相同的位置。

约翰的监视系统包含三个特殊的摄像头,每个摄像头都能够沿垂直或水平线观察一条线上所有的奶牛。

请确定约翰是否可以通过合理设置三个摄像头的摆放位置,以便他可以监视所有

也就是说,请确定是否可以通过三条垂直或水平摆放的线将所有

输入格式
第一行包含整数

接下来 行,每行包含两个整数 ,表示一头奶牛所在位置的横纵坐标。

输出格式
如果可以通过三条垂直或水平摆放的线将所有 个奶牛所在位置全部覆盖,请输出 ,否则输出

数据范围

输入样例:

6
1 7
0 0
1 2
2 0
1 4
3 4

输出样例:

1

样例解释

#include<iostream>
#include<unordered_set>

#define x first
#define y second

using namespace std;

const int N = 50010;

typedef pair<int, int> PII;

int n;
PII q[N];
unordered_set<int> row, col;

int dfs(int u, int cnt){

if(cnt > 3) return 0;
if(u == n) return 1;

if(row.count(q[u].x) || col.count(q[u].y))
return dfs(u + 1, cnt);

row.insert(q[u].x);
if(dfs(u + 1, cnt + 1)) return 1;
row.erase(q[u].x);

col.insert(q[u].y);
if(dfs(u + 1, cnt + 1)) return 1;
col.erase(q[u].y);

return 0;
}

int main(){

scanf("%d", &n);

for(int i = 0; i < n; i++)
scanf("%d%d", &q[i].x, &q[i].y);

printf("%d\n", dfs(0, 0));

return 0;
}


举报

相关推荐

0 条评论