比赛名称:AtCoder Beginner Contest 284
比赛链接:AtCoder Beginner Contest 284
A - Sequence of Strings
输入若干字符串,再把这些字符串按输入顺序倒序输出
#include <bits/stdc++.h>
using namespace std;
signed main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
vector<string> s(n);
for(string &i : s) cin >> i;
for(int i = n - 1; i >= 0; i--) cout << s[i] << "\n";
return 0;
}
B - Multi Test Cases
问数组内有多少个奇数
#include <bits/stdc++.h>
using namespace std;
signed main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
while(t--){
int n;
cin >> n;
vector<int> a(n);
int ans = 0;
for(int &ai:a){
cin >> ai;
ans += ai & 1;
}
cout << ans <<"\n";
}
return 0;
}
C - Count Connected Components
题意问一个图中有多少个连通块。
dfs即可
#include <bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, m;
cin >> n >> m;
vector<vector<int>> g(n);
vector<bool> vis(n);
for (int i = 0; i < m; i++){
int a, b;
cin >> a >> b, a--, b--;
g[a].push_back(b);
g[b].push_back(a);
}
auto dfs = [&] (auto dfs, int x){
if(vis[x]) return;
vis[x] = 1;
for(auto i : g[x]) {
dfs(dfs, i);
}
};
int ans = 0;
for (int i = 0; i < n; i++){
if (vis[i] == 0){
dfs(dfs, i);
ans++;
}
}
cout << ans << endl;
return 0;
}
D - Happy New Year 2023
一个数,能被分解为,其中和均为质数。
其中
我们可以先把质数筛出来,然后再去找p和q
根据范围我们只需要筛出3e6左右范围的质数即可
#include <bits/stdc++.h>
#define int long long
const int N = 1e7 + 9;
bool vis[N];
int p[N], cnt;
void get_primes(int x){
for (int i = 2; i <= x; i++) {
if (!vis[i]) p[cnt++] = i;
for (int j = 0; p[j] <= x / i; j++){
vis[i * p[j]] = true;
if (i % p[j] == 0) break;
}
}
}
signed main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
get_primes(1e7);
int t;
std::cin >> t;
while(t--){
int n;
std::cin >> n;
for(auto pi : p){
if(n % pi == 0){
int q = n / pi;
int x = sqrt(q);
int y = x * x;
if(y == q) {
std::cout << x << " " << pi << "\n";
break;
}
}
if(n % (pi * pi) == 0){
std::cout << pi << " " << n / (pi * pi) << "\n";
break;
}
}
}
return 0;
}
E - Count Simple Paths
问有多少个从节点1开始的简单路径。
注意坑点:
#include <bits/stdc++.h>
using namespace std;
signed main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, m;
cin >> n >> m;
vector<vector<int>> g(n);
vector<bool> vis(n);
for(int i = 0; i < m; i++){
int a, b;
cin >> a >> b, a--, b--;
g[a].push_back(b);
g[b].push_back(a);
}
int min = 1000000;
int ans = 0;
auto dfs = [&] (auto dfs, int x){
if(vis[x]) return;
ans++;
if(ans == min) {
cout << ans << "\n";
exit(0);
}
vis[x] = 1;
for(auto i : g[x]) {
dfs(dfs, i);
}
vis[x] = 0;
};
dfs(dfs, 0);
cout << ans << "\n";
return 0;
}