【题解】 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给的)
第一种方法,也就是主播赛时想到的解法,用树状数组。
原本主播是这么想的:
先输入进来

浙公网安备 33010602011771号