洛谷八连测2017R5

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了洛谷八连测2017R5相关的知识,希望对你有一定的参考价值。

传送门

题目描述

题目难度不一定按照题目顺序递增

在 n * mn?m 的网格上有一些点。在第 ii 行第 jj 列放置摄像头可以观察到所有满足 x = i, y \\geq jx=i,yj 或x \\geq i, y = jxi,y=j的点。求最少需要放多少个摄像头才能观察到所有给定的点,注意摄像头必须放在点上,且要保证任意一个摄像头均不能观察到另一个摄像头。保证输入中的点不会重复。

输入输出格式

输入格式:

 

第一行包含一个整数 TT,表示数据组数。每组数据的格式如下:

第一行包含三个正整数 n, m, qn,m,q,表示网格的大小和给定点的个数。

接下来 qq 行,每行两个整数 x_i, y_ixi?,yi? ,表示第 ii 个点的坐标。

 

输出格式:

 

对每组数据输出一行,表示最少放置摄像头的点数,如果无解输出-1。

输入输出样例

输入样例#1: 复制
1
2 4 4
1 1
2 1
2 3
2 4
输出样例#1: 复制
2
技术分享

贪心
 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<cmath>
 6 #include<map>
 7 #include<set>
 8 #include<queue>
 9 #include<vector>
10 #define INF 0x7f7f7f7f
11 #define pii pair<int,int>
12 #define ll long long
13 #define MAXN 100005
14 using namespace std;
15 
16 int read(){
17     int x=0,f=1;char ch=getchar();
18     while(ch<0||ch>9){if(-==ch)f=-1;ch=getchar();}
19     while(ch>=0&&ch<=9){x=x*10+ch-0;ch=getchar();}
20     return x*f;
21 }
22 int n;
23 pii a[MAXN];
24 int H[MAXN],L[MAXN];
25 void solve(){
26     memset(H,0,sizeof(H));
27     memset(L,0,sizeof(L));
28     int X=read(),Y=read();
29     n=read();
30     for(int i=1;i<=n;i++){
31         a[i]=make_pair(read(),read());
32     }    
33     sort(a+1,a+n+1);
34     int ans=0;
35     for(int i=1;i<=n;i++){
36         if(H[a[i].first]||L[a[i].second]){
37             continue;
38         }
39         ans++;
40         H[a[i].first]=1;
41         L[a[i].second]=1;
42     }
43     printf("%d\\n",ans);
44 }
45 int main()
46 {
47 //    freopen("data.in","r",stdin);
48     int T=read();
49     while(T--){
50         solve();
51     }
52     return 0;
53 }

 



以上是关于洛谷八连测2017R5的主要内容,如果未能解决你的问题,请参考以下文章

洛谷八连测R5whzzt-Confidence

洛谷八连测R5whzzt-Warmth

洛谷八连测R5 题解

洛谷 八连测 R4

洛谷八连测R6

洛谷八连测R6