A - chukodaiA - chukodai
题目大意
题目要求交换字符串S中第a个字符和第b个字符的位置,并输出结果。
思路分析
借用临时变量t,进行记录交换。
时间复杂度
O(∣S∣)
- 输出交换后的字符串的时间复杂度为O(∣S∣),其中∣S∣表示字符串SS的长度。
AC代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;
cin >> s;
int a, b;
cin >> a >> b;
// 交换第a个字符和第b个字符的位置
int t;
t = s[a - 1];
s[a - 1] = s[b - 1];
s[b - 1] = t;
cout << s << endl;
}
B - Who is missing?B - Who is missing?
题目大意
找出Takahashi拿走的那张卡片上写着的整数。有4张写着整数1的卡片,4张写着整数2的卡片,以此类推,直到4张写着整数N的卡片,总共有4N张卡片。
Takahashi洗了这些卡片,拿走了其中一张,然后给你剩下的4N−1张卡片。堆中第i张卡片上写着整数Ai
思路分析
- 可以使用一个计数数组count来记录每个整数出现的次数。
- 遍历给定的4N−1张卡片,将每个整数的计数增加1。
- 遍历计数数组,找到出现3次的整数,即为Takahashi拿走的卡片上写着的整数。
时间复杂度
O(N+n)
AC代码
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> count(n + 1); // 计数数组,下标从1到n
for (int i = 0; i < 4 * n - 1; ++i) {
int a;
cin >> a;
count[a] += 1;
}
for (int i = 1; i <= n; ++i) {
if (count[i] == 3) {
cout << i << '\n';
}
}
return 0;
}
C - Route Map C - Route Map
题目大意
给定AtCoder Railway上的N个车站,第i个车站(1≤i≤N)从起始站开始命名为Si。普通列车停靠所有车站,而快速列车则可能不停靠。具体来说,快速列车只在M个(M≤N)车站停靠,其中第jj个停靠点(1≤j≤M)是名为Tj的车站。
这里保证T1=S1和TM=SN,也就是说快速列车会在起始站和终点站都停靠。
对于每个车站,判断快速列车是否停靠在该车站。
思路分析
根据题目要求,需要判断每个车站是否在快速列车的停靠站集合中。为了高效地判断,可以将快速列车的停靠站集合存储在一个set中。然后遍历每个车站,通过set的count函数来判断该车站是否在快速列车的停靠站集合中.
- 使用set容器的原因是,set提供了O(1)的查找时间复杂度,能够快速判断一个元素是否存在于集合中。
时间复杂度
O(N+M)
AC代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n, m;
cin >> n >> m;
vector<string> s(n);
set<string> ra;
for(int i=0; i<n; i++) {
cin >> s[i];
}
for(int i=0; i<m; i++) {
string st;
cin >> st;
ra.insert(st);
}
for(int i=0; i<n; i++) {
if(ra.count(s[i]) > 0) { // 使用count函数判断当前车站是否在快速列车停靠站集合中
cout << "Yes" << endl;
} else {
cout << "No" << endl;
}
}
return 0;
}