SWPU 2021年团队程序设计天梯赛选拔赛 题解

本文提供了SWPU 2021年团队程序设计天梯赛选拔赛的题解,包括L1到L3级别各题的解决方案。涉及题目包括分解质因数、并查集、STL使用、二进制操作等,同时给出了不同题目的多种解题思路,如深度优先搜索、区间问题转换、树上启发式合并等。建议参赛者根据题解加强练习,准备正赛。
摘要由CSDN通过智能技术生成

补题场链接:https://pintia.cn/problem-sets/1373141720280027136

本次选拔赛除后三题以外,其余的题目难度都不是很大,简单筛选一下大家的基础。请大家这段时间加油刷题,好好准备 4月24日 的天梯赛正赛。

L1-1 买不起的肥宅水

在这里插入图片描述

Solution

直接算即可,因为瓶数一定是整数所以取整。

Code

#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> PII;
typedef pair<double, int> PDI;
const int N = 6e6 + 7, M = 5e6 + 7, mod = 1e9 + 7, INF = 0x3f3f3f3f;
const double PI = acos(-1.0), eps = 1e-8;

double n;

signed main()
{
   
    scanf("%lf", &n);
    cout << int(50 / n) <<endl;
    return 0;
}

L1-2 分解分解再分解

在这里插入图片描述

Solution

分解质因数模板题。

Code

#include <bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int, int> PII;
typedef pair<double, int> PDI;
const int N = 6e6 + 7, M = 5e6 + 7, mod = 1e9 + 7, INF = 0x3f3f3f3f;
const double PI = acos(-1.0), eps = 1e-8;

int n, m;
int ans[N], tot;

signed main()
{
   
    scanf("%lld", &n);
    for(int i = 2; i <= n / i; ++ i) {
   
        if(n % i == 0) {
   
            ans[ ++ tot] = i;
            while(n % i == 0) n /= i;
        }
    }
    if(n > 1) ans[ ++ tot] = n;
    cout << tot << endl;
    for(int i = 1; i <= tot; ++ i) {
   
        printf("%lld%s", ans[i], i == tot ? "\n" : " ");
    }
    return 0;
}

L1-3 阅览室

在这里插入图片描述

直接模拟即可。

#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> PII;
typedef pair<double, int> PDI;
const int N = 1e4 + 7, M = 5e6 + 7, mod = 1e9 + 7, INF = 0x3f3f3f3f;
const double PI = acos(-1.0), eps = 1e-8;

double sum;
int Time[N];
bool vis[N];
int t, tot;

signed main()
{
   
    scanf("%d", &t);
    char ch;
    int id, h, m;
    while(scanf("%d %c %d:%d", &id, &ch, &h, &m) != EOF) {
   
        if(id == 0) {
   
            memset(vis, 0, sizeof vis);
            memset(Time, 0, sizeof Time);
            if(tot == 0) puts("0 0");
            else printf("%d %d\n", tot, int(sum / tot + 0.5));
            sum = 0.0, tot = 0;
        }
        if(ch == 'S') {
   
            vis[id] = 1;
            Time[id] = h * 60 + m;
        }
        else if(ch == 'E' && vis[id]) {
   
            vis[id] = 0;
            sum += h * 60 + m - Time[id];
            ++ tot;
        }
    }
    return 0;
}

L1-4 桥短几何

在这里插入图片描述

直接爆搜即可。

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
const int INF = 0x3f3f3f3f;
const double eps = 1e-4;
typedef long long ll;
typedef pair<int, int> pii;
int n, mp[110][110], dx[4] = {
   0, 1, 0, -1}, dy[4] = {
   1, 0, -1, 0};
int island1[10000], island2[10000], idx1, idx2;
void bfs(int x, int y, int color)
{
   
    queue<pii> q;
    q.push({
   x, y});
    mp[x][y] = color;
    while(q.size())
    {
   
        pii t = q.front();
        q.pop();
        for (int i = 0; i < 4; i ++)
        {
   
            int nx = t.first + dx[i], ny = t.second + dy[i];
            if (nx < 1 || nx > n || ny < 1 || ny > n) continue
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

繁凡さん

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值