abc 463 题解

A - 16:9

这道题就是一道很简单的语法题,判断x:y是否为16:9。

16/9是无限小数,如何判断呢?

因为x:y=16:9,由小学数学可知,16y=9x。直接判断即可。

代码如下:

#pragma GCC optimize("O3")

#include<bits/stdc++.h>
using namespace std;

#define endl "\n"

int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	
	//freopen("test.in", "r", stdin);
	//freopen("test.out", "w", stdout);
	
	int x, y; cin >> x >> y;
	
	if(x * 9 == y * 16)
	{
		cout << "Yes" << endl;
	}
	
	else cout << "No" << endl;
	
	return 0;
}

B - Train Reservation

本题相对简单。

问题陈述:

高桥正在尝试预订火车座位。

他考虑预订的候选列车有 $N$ 列,编号为 $1, 2, \dots, N$ 。每列火车有五列座位,分别称为 A 列、B 列、C 列、D 列和 E 列。

每列火车的当前座位可用性信息为字符串 $S _ 1, S _ 2, \dots, S _ N$ 。这里, $S _ 1, S _ 2, \dots, S _ N$ 的长度都是 $5$ ,列车 $i$ 的 A 列到 E 列分别对应 $S _ i$ 的第一到第五个字符。如果该字符为 "o",则相应列中有空位;如果该字符为 "x",则相应列中没有空位。

高桥希望在第 $X$ 列保留一个座位,其中 $X$ 是 ABCDE 中的一个。请判断至少一列火车的 $X$ 列中是否有空位。

解决思路

我们发现,我们只需要对每一个状态,看到要求行是否为'o'即可。

代码如下:

#pragma GCC optimize("O3")

#include<bits/stdc++.h>
using namespace std;

#define endl "\n"

int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	
	//freopen("test.in", "r", stdin);
	//freopen("test.out", "w", stdout);
	
	int n; char x1; cin >> n >> x1;
	
	while(n --)
	{
		string s; cin >> s;
		if(s[x1 - 'A'] == 'o')
		{
			cout << "Yes" << endl;
			return 0;
		}
	}
	
	cout << "No" << endl;
	
	return 0;
}

C - Tallest at the Moment

问题陈述(必须好好看,不然看不懂我的思路)

当前,会议室中有 $N$ 位高桥。第 $i$ 位 $(1\le i\le N)$ 高桥的身高为 $H_i$,将在 $L_i$ 分钟后离开房间。一旦高桥离开房间,便不会再返回。

你将收到 $Q$ 个查询,请按顺序回答。对于第 $i$ 个查询 $(1\le i\le Q)$,你会得到一个整数 $T_i$,请找出 $T_i+\dfrac{1}{2}$ 分钟后仍身处房间的高桥的最大身高。根据本题的约束条件,保证此时至少有一位高桥会在房间内。

解决思路

我们可以考虑DeepSleep给出的离线大顶堆解决。

核心:当$T$单调递减时,随着$T_i$的减小,$L_i>T$的数量只会增加,不会减少。

于是,我们可以这么做:

1.将$L_i$和$T_i$都按照从大到小排列

2.从大到小遍历$T_i$:

将每一个$L_i$<$T$的元素的元素都放入大顶堆中(因为他们离开的时间晚于$T_i$)

此时堆顶元素就是还在的人的最大身高

代码:

#pragma GCC optimize("O3")

#include<bits/stdc++.h>
using namespace std;

#define endl "\n"

struct people{ int h, l; };
struct query{ int t, idx, ans; };

bool cmp1(people a, people b)
{
	return a.l > b.l;
}
bool cmp2(query a, query b)
{
	return a.t > b.t;
}
bool cmp3(query a, query b)
{
	return a.idx < b.idx;
}

int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	
	//freopen("test.in", "r", stdin);
	//freopen("test.out", "w", stdout);
	
	int n; cin >> n;
	vector<people> peo(n);
	for(int i = 0;i < n;i ++)
	{
		cin >> peo[i].h >> peo[i].l;
	}
	
	int q; cin >> q;
	vector<query> Q(q);
	for(int i = 0;i < q;i ++)
	{
		cin >> Q[i].t, Q[i].idx = i;
	}
	
	sort(peo.begin(), peo.end(), cmp1);
	sort(Q.begin(), Q.end(), cmp2);
	
	priority_queue<int> pq; int p = 0;
	
	/*
	for(query &qry : Q)
	{
		while(p < n && peo[p].l > qry.t)
		{
			pq.push(peo[p].h), p ++;
		}
		qry.ans = pq.top();
	}
	*/
	
	for(auto &[t, idx, ans] : Q)
	{
		while(p < n && peo[p].l > t)
		{
			pq.push(peo[p].h), p ++;
		} ans = pq.top();
	}
	
	sort(Q.begin(), Q.end(), cmp3);
	
	for(auto [t, idx, ans] : Q)
	{
		cout << ans << endl;
	}
	
	return 0;
}
posted @ 2026-07-12 22:27  xiongchenxi  阅读(6)  评论(0)    收藏  举报