【题解】 ABC 462

写在前面

主播是新号,本次ABC只AC了4道题。但是可能会尝试解决后面的几道题。等我做出来了再来接着写吧!

主播的号

欢迎关注!!!

1. A - Secret Numbers

本题大致题意就是:找出字符串中所有的数字,并按顺序输出。

这么简单的题,直接按顺序遍历,遇到数字直接输出即可啦!

这里介绍两个东西:

1.C++特性for(auto i : s)可以快速按顺序遍历s中所有元素,i就是元素,而不像之前那样要写s[i]

2.isdigit函数。isdigit函数是std库自带,可以直接用。

isdigit(c) == true <-> '0' <= c && c <= '9'

isdigit(c) == false <-> '0' > c || c > '9'

#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);
	
	string s; cin >> s;
	for(auto c : s)
	{
		if(isdigit(c))
		{
			cout << c;
		}
	}
	
	return 0;
}

2. B - gift

本题和上一次的ABC461的B题有异曲同工之妙。

题目大意是:i人给k个人送了礼物,分别是ai,1,ai,2,......,ai,k,求对每一个人,那些人给他送过礼。

就是建一个邻接表,若i给j送过礼,则记:j受过i的礼,然后再输出即可。

用到vector。看这里了解vector(一点进去,最上面就是)

代码:

#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; cin >> n;
	vector<vector<int>> a(n + 1);
	
	for(int i = 1;i <= n;i ++)
	{
		a[i].clear();
	}
	
	for(int i = 1;i <= n;i ++)
	{
		int k; cin >> k;
		while(k --)
		{
			int person; cin >> person;
			a[person].push_back(i);
		}
	}
	
	for(int i = 1;i <= n;i ++)
	{
		cout << a[i].size() << " ";
		for(auto j : a[i])
		{
			cout << j << " ";
		}
		cout << "\n";
	}
	
	return 0;
}

3. C - New covered Numbers

本题,主播想到两种方法(当然,有一种是赛后Deepslep给的)

第一种方法,也就是主播赛时想到的解法,用树状数组。

原本主播是这么想的:

先输入进来

posted @ 2026-06-13 22:31  熊晨曦  阅读(0)  评论(0)    收藏  举报