Atcoder Beginner Contest 276
No. | Task Name | Solution |
---|---|---|
A | Rightmost | 模拟 |
B | Adjacency List | 模拟 |
C | Previous Permutation | 模拟+思维 |
D | Divide by 2 or 3 | 模拟+数学 |
E | Round Trip | bfs+优化 |
F (待完成) | Double Chance | 数学 |
G (待完成) | Count Sequences | 数学 |
A - Rightmost
题目大意
给你一个字符串,让你找到在最右边的 a
,如果没有就输出 -1
解法分析
模拟。
先设答案为 -1
然后去找最右边的 a
AC Code#1
# include <bits/stdc++.h>
# define RI register int
# define REP(i, n, m) for (RI i = (n);i <= (m);i++)
# define rep(i, n) REP(i, 1, n)
using namespace std;
char s[205];
int main(){
scanf("%s", s+1);
int n = strlen(s+1), ans = -1;
rep(i, n) if (s[i] == 'a') ans = i;
cout << ans;
return 0;
}
B - Adjacency List
题目大意
给你一张无向图,让你升序输出每个节点所连的点。
解法分析
AC Code#1
# include <bits/stdc++.h>
# define mod 998244353
//# define mod 1000000007
# define inf 1000000000
# define pb push_back
# define RI register int
# define REP(i, n, m) for (RI i = (n);i <= (m);i++)
# define rep(i, n) REP(i, 1, n)
using namespace std;
int n, m;
vector <int> g[200005];
int main(){
scanf("%d%d", &n, &m);
for (int i = 1;i <= m;i++){
int u, v;
scanf("%d%d", &u, &v);
g[u].pb(v);
g[v].pb(u);
}
for (int i = 1;i <= n;i++){
printf("%d ", g[i].size());
sort (g[i].begin(), g[i].end());
for (int j = 0;j < g[i].size();j++) printf("%d ", g[i][j]); puts("");
}
return 0;
}