列表

详情


NC234682. School

描述

Problem Number: 
D 国的时间制度很奇怪,一天有 h 小时,一小时有 m 分。
位于 D 国的 E 校给学生发放了校卡。
这种校卡具有通话功能,但是在某些时间段,校卡是不能通话的。
共有 n 个不能通话时间段,第 i 段从 a_ib_i 分到 c_id_i 分不可通话(包含)。
同时,会有 q 组询问,每次询问包含两个整数 x,y,询问的是 xy 分是否可以打电话。如果可以则输出 Yes,否则输出 No。

输入描述

第一行四个整数 n,h,m,q
接下来 n 行,每行四个整数 a,b,c,d,意义如题述。
接下来 q 行,每行两个整数 x,y,表示询问 xy 分是否可以打电话。

输出描述

q 行,对于每一个询问,输出 Yes 或 No,每行一个。

示例1

输入:

3 24 60 2
7 0 11 15
14 20 17 35
18 50 21 10
7 1
21 11

输出:

No
Yes

说明:

- 71 分在第 1 段不能通话时间段中,所以不能通话。
- 2111 分可以通话。

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(clang++ 11.0.1) 解法, 执行用时: 824ms, 内存消耗: 20088K, 提交时间: 2022-08-31 22:48:19

#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
long long a[1010],b[1010];
int main(){
	int n,h,m,q;
	cin>>n>>h>>m>>q;
	ll a_,b_,c,d;
	for(int i=1;i<=n;i++){
		scanf("%lld %lld %lld %lld",&a_,&b_,&c,&d);
		a[i]=a_*m+b_;
		b[i]=c*m+d;
	}
	sort(a+1,a+1+n);
	sort(b+1,b+1+n);
	while(q--){
		scanf("%lld %lld",&c,&d);
		if(lower_bound(a+1, a+1+n, c*m+d)-a==lower_bound(b+1,b+1+n, c*m+d)-b)
			printf("Yes\n");
		else
			printf("No\n");
	}
	return 0;
}

上一题