A - Majority
问字符串For
是否比字符串 Against
的数量多.
代码如下:
#include <iostream>
using namespace std;
int n, ans, res;
string s;
int main()
{
cin >> n;
for(int i = 0; i < n; i ++)
{
cin >> s;
if(s == "Against") ans ++;
else res ++;
}
if(ans > res) cout << "No";
else cout << "Yes";
return 0;
}
B - Postal Card
给一个字符串长度为6的字符串数组s和一个字符串长度为3的字符串数组t,问si长度为3的字符串后缀是否在t中出现过.直接对长度为6的字符串数组取余就好了 %1000;然后两层for循环去找出答案
代码如下:
#include <iostream>
using namespace std;
const int N = 1010;
int n, m, cnt;
int a[N], b[N];
int main()
{
cin >> n >> m;
for(int i = 0; i < n; i ++)
{
cin >> a[i];
a[i] = a[i] % 1000;
}
for(int j = 0; j < m; j ++)
{
cin >> b[j];
}
for(int i = 0; i < n; i ++)
{
for(int j = 0; j < m; j ++)
{
if(a[i] == b[j])
{
cnt ++;
break;
}
}
}
cout << cnt << endl;
return 0;
}
C - Path Graph?
题意:给我们一个无向图,有n个顶点,m条边,让我们判断一下当前的这个无向图是否为路径图
并查集:
我们可以一个Path Graph一定满足以下条件:
- 只有一个连通块
- 只有两个入度为1,其余均是入度为2
- 点数-边数=1
用cnt数组记录各点的入度情况,并查集判断连通块个数即可。此外还要考虑是否有闭环的特殊情况。
#include <iostream>
using namespace std;
const int N = 200010;
int n, m, a, b, fu, fv, cnt1, cnt2;
int p[N], d[N];
int find(int x)
{
if (p[x] != x) p[x] = find(p[x]);
return p[x];
}
int main()
{
cin >> n >> m;
for(int i = 1; i <= n; i ++)
{
p[i] = i;
}
for(int i = 1; i <= m; i ++)
{
cin >> a >> b;
d[a] ++, d[b] ++;
fu = find(a), fv = find(b);
p[fv] = fu;
}
for(int i = 1; i <= n; i ++)
{
if(d[i] == 1) cnt1 ++;
else if(d[i] != 2)
{
cout << "No" << endl;
return 0;
}
if(p[i] == i) cnt2 ++;
}
if(cnt1 == 2 && cnt2 == 1) cout << "Yes" << endl;
else cout << "No" << endl;
return 0;
}