【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(9)
比赛链接本文发布于博客园,会跟随补题进度实时更新,若您在其他平台阅读到此文,请前往博客园获取更好的阅读体验。
跳转链接:https://www.cnblogs.com/TianTianChaoFangDe/p/18869039
开题 + 补题情况
最近一直在准备期中考试,好久没写代码了,这场有点糖,前一个小时一题没开,实属红温,尤其是 1007,想了好久好久。
下周打南昌,自己第一次参加全国性的比赛,希望自己加油发挥吧!
1010 - 绳子切割
此题考查并查集(实际暴力也可以)。
我们删点是从大到小删,那么倒过来就是加点,加点就是从小到大加。
对于每一个点,连向比它小的结点的连通块,看是否能和 \(0\) 在同一块,如果不在,那么直接输出 \(0\),因为这个时候,它不和横梁同属一个连通块,说明它到 \(0\) 之间有点被删除了,进而导致该点被提前删除了。
点击查看代码#include <bits/stdc++.h>
#define inf32 1e9
#define inf64 2e18
#define ls o << 1
#define rs o << 1 | 1
using i64 = long long;
using u64 = unsigned long long;
using u32 = unsigned int;
const int N = 2e5 + 9;
struct DSU {
std::vector<int> fa;
DSU(int n) {
fa.resize(n + 1);
std::iota(fa.begin(), fa.end(), 0);
}
int root(int x) {
return (fa == x) ? x : (fa = root(fa));
}
void merge(int u, int v) {
if(root(u) == 0) {
fa = root(fa);
} else {
fa = root(fa);
}
}
};
void solve()
{
int n, m;std::cin >> n >> m;
DSU dsu(n);
std::vector<std::vector<int>> g(n + 1);
for(int i = 1;i <= m;i ++) {
int u, v;std::cin >> u >> v;
g.push_back(v);
g.push_back(u);
}
for(int i = 1;i <= n;i ++) {
for(auto &x : g) {
if(i < x)continue;
dsu.merge(i, x);
}
if(dsu.root(i) != 0) {
std::cout << 0 << '\n';
return;
}
}
std::cout << 1 << '\n';
}
int main()
{
std::ios::sync_with_stdio(0), std::cin.tie(0), std::cout.tie(0);
int t = 1;std::cin >> t;
while(t --)solve();
return 0;
}1005 - 真爱口上
这个题看似是一个非常恶心的模拟题,但是题目有一个很重要的信息:所有的字符串都是符合规则的音节序列。也就意味着我们不需要判断串的合法性,只需要根据特征计数就行了。
[*]基本音节结构:不难发现,一定是以元音结尾,因此只需要计算元音有多少个即可。
[*]鼻音:单算 nn 相连的情况,特别注意比如 nnna 的情况,此时不能算为两个鼻音。
[*]促音:计算 pp tt kk ss 的数量即可。
点击查看代码#include <bits/stdc++.h>
#define inf32 1e9
#define inf64 2e18
#define ls o << 1
#define rs o << 1 | 1
using i64 = long long;
using u64 = unsigned long long;
using u32 = unsigned int;
const int N = 2e5 + 9;
template<typename T>
T up(T x, T y) {
return (x + y - 1) / y;
}
void solve()
{
int v, w;std::cin >> v >> w;
int h = w / 2 + 1;
int l = w - h;
int sum = v / h;
v -= sum * h;
int ans = 0;
if(sum) {
if(v > l)ans = sum + 1;
else ans = sum;
} else {
ans = 1;
}
std::cout << ans << '\n';
}
int main()
{
std::ios::sync_with_stdio(0), std::cin.tie(0), std::cout.tie(0);
int t = 1;std::cin >> t;
while(t --)solve();
return 0;
}
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]