Contestant. Rank 3721. Rating +41.
A. Many A+B Problems
题意
给定 \(a, b\),输出 \(a + b\)。
思路
如题
时间复杂度:\(O(1)\)
对应AC代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main() {
ios::sync_with_stdio(0);
int t;
cin >> t;
while(t --){
int a, b;
cin >> a >> b;
cout << a + b << '\n';
}
return 0;
}
怎么会是呢
B. Qualification Contest
题意
给定 \(n\) 个由小写字母组成的字符串,输出字典序升序排序的前 \(k\) 个字符串。
思路
考虑到 \(sort\) 对字符串的排序就是按照字典序的,所以调函数输出即可。
时间复杂度:\(O(n \log n)\)
对应AC代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 110;
string a[N];
signed main() {
ios::sync_with_stdio(0);
int k, n;
cin >> n >> k;
for (int i = 0; i < n; i++) cin >> a[i];
sort(a, a + k);
for (int i = 0; i < k; i++) {
cout << a[i] << '\n';
}
return 0;
}
草,卡了半天发现调函数就好了(
C. Don't be cycle
题意
给定一个无向有环图,输出最小删除边数,使整个图无环。
思路
考虑到树的结构即为无向无环,所以我们不妨跑一遍最小生成树,剩余的边就是我们想要删去的边了。
时间复杂度:\(O(e \log_2 e)\)
对应AC代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 200010, M = 400010;
int n, m;
int f[N];
int u[M], v[M], ans = 0;
int find(int x){
return x == f[x] ? x : f[x] = find(f[x]);
}
void kruskal(){
for(int i=0;i<m * 2;i++){
int eu = find(u[i]), ev = find(v[i]);
if(eu != ev){
ans ++;
f[ev] = eu;
}
}
}
signed main() {
ios::sync_with_stdio(0);
cin >> n >> m;
for(int i=1;i<=n;i++) f[i] = i;
for(int i=0;i<m;i++){
int a, b;
cin >> a >> b;
u[i << 1] = a;
v[i << 1] = b;
u[i << 1 | 1] = b;
v[i << 1 | 1] = a;
}
kruskal();
cout << m - ans;
return 0;
}
我蠢了,想了好一会儿
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Blog - Floating Ocean!
评论