PDSU-ACM 2024 第四次周赛 题解

目录/题目列表


注:本题解仅供参考

题解中所有代码均省略头文件,以及添加了宏定义#define int long long

代码中std::可以去掉,只要加上“using namespace std;”就行。

G题与并查集维护相关的知识点为并查集的重点


如果有疑问欢迎评论或找本人询问


A 神仙说他也不懂(签到/模拟)

B 树状数组(模拟)

C 回滚莫队(思维)

D LYS博弈(思维)

E 网络流(并查集-板子)

F 最近公共祖先(思维/并查集)

G 树链剖分 (并查集、完全图、思维)


A 神仙说他也不懂(签到/模拟)


题面:


思路:

          按题目的信息,奇数位的字符串输出第0位,偶数位的字符串输出第1位即可。


AC代码:

void solve()
{
    int n;
    std::string s;
    std::cin >> n;
    for (int i = 1; i <= n; i++)
    {
        std::cin >> s;
        if (i % 2)
            std::cout << s[0];
        else
            std::cout << s[1];
    }
}

B 树状数组(模拟)


题面:


思路:

          原本这题其实是前缀和,但想了想也没啥新颖的改法,于是变成普通的遍历求和做法,只需注意保留小数就可以

          根据动量守恒:m1v1=(m1+m2)v2 就可以求出结果,并且注意题目要求的是第i个小球


AC代码:

void solve()
{
    int n, v, q;
    std::cin >> n >> v >> q;
    std::vector<int> a(n + 1, 0LL);
    for (int i = 1; i <= n; i++)
    {
        std::cin >> a[i];
        a[i] += a[i - 1];
    }
    std::cout << std::fixed << std::setprecision(2) << a[1] * v * 1.0 / (a[q]);
}

C 回滚莫队(思维)


题面:


思路:

先看每个Ai代表什么,代表的是相邻两位的和

由提示给出的表盘可知,转n次正好能转一圈

那么A数组就包含了a1+a2,a2+a3,……,an-1+an,a1+an(a代表表盘上原本的数字),

所以A数组的总和,即A1+A2+......An,就等于2  *(a1+a2+.......+an

那么平均数就很好求了

这道题过程中可能会爆long long,所以#define int long long 是个好习惯(仅打比赛上的)


AC代码:


void solve()
{
    int n;
    std::cin >> n;
    int sum = 0;
    for (int i = 1; i <= n; i++)
    {
        int x;
        std::cin >> x;
        sum += x;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值