AtcoderABC222场

A - Four DigitsA - Four Digits

题目大意

给定一个整数N,其范围在0到9999之间(包含边界)。在将N转换为四位数的字符串后,输出它。如果N的位数不足四位,则在前面添加必要数量的零。

思路分析

可以使用输出流的格式设置功能来实现这一点。

具体做法是,使用setw(4)和setfill('0')来设置输出格式,将N输出为四位数,并在不足四位时用0进行填充。

时间复杂度

O(1)

AC代码

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

int main() {
    int n;
    cin >> n;
    cout << setw(4) << setfill('0') << n << endl;
    return 0;
}

B - Failing Grade / B - Failing Grade /

题目大意

有N个学生参加了一次考试。这些学生被标记为Student 1、Student 2等等,第i个学生得分为ai。

分数低于P分的学生被认为考试不及格,无法获得学分。求考试不及格的学生人数。

思路分析

题目要求计算考试不及格的学生人数,可以通过遍历每个学生的得分,并根据阈值P进行判断来实现。

时间复杂度

O(N)

AC代码

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

int main() {
    int n, p, ans = 0;
    cin >> n >> p;
    for (int i = 0; i < n; i++) {
        int a;
        cin >> a;
        if (a < p)
            ans++;
    }
    cout << ans << endl;
    return 0;
}

C - Swiss-System TournamentC - Swiss-System Tournament

题目大意

题目要求模拟一个石头剪刀布比赛,参赛选手分为2N人,根据比赛结果和ID号码对选手进行排名,最终输出排名结果。

思路分析

创建一个大小为2N的数组rank,其中每个元素是一个pair,表示参赛者的胜场数和ID号码。初始时,所有参赛者的胜场数都为0,ID号码按照输入顺序排列。

然后,按照比赛轮数M进行迭代。在每一轮比赛中,遍历每一个比赛对,根据比赛结果判断胜利者,并更新其胜场数。比赛结果的判断通过一个judge函数来实现,根据石头剪刀布的规则,判定两个选手之间的比赛结果。

每轮比赛结束后,根据选手的胜场数对rank数组进行排序,以确定排名。排序时,因为要使用sort函数,所以要首先根据胜场数的负值排序,然后根据ID号码排序。

最后,按照排名顺序输出参赛者的ID号码,注意要将ID号码加1,因为在代码中使用的是0-based索引。

时间复杂度

O(NMlogN)

AC代码

cpp 复制代码
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

// 判断胜负的函数
int judge(char a, char b) {
    // -1: 平局,0:前一个人胜利,1:后一个人胜利
    if (a == b) return -1;
    if (a == 'G' && b == 'P') return 1;
    if (a == 'C' && b == 'G') return 1;
    if (a == 'P' && b == 'C') return 1;
    return 0;
}

int main() {
    int N, M;
    cin >> N >> M;  // 输入参赛人数N和比赛轮数M
    vector<string> S(2 * N);  // 存储所有参赛者的手势序列
    for (int i = 0; i < 2 * N; i++) {
        cin >> S[i];  // 输入每个参赛者的手势序列
    }

    vector<pair<int, int>> rank(2 * N);  // 存储参赛者的排名和ID
    for (int i = 0; i < 2 * N; i++) {
        rank[i] = make_pair(0, i);  // 初始化排名和ID,初始胜场数为0
    }
    // rank[i] = [x,y]  -> 第(i+1)名参赛者的胜场数为 -x,ID为 y

    for (int j = 0; j < M; j++) {
        for (int i = 0; i < N; i++) {
            int player1 = rank[2 * i].second;  // 第i个比赛对中的第一个参赛者的ID
            int player2 = rank[2 * i + 1].second;  // 第i个比赛对中的第二个参赛者的ID
            int result = judge(S[player1][j], S[player2][j]);  // 第j轮比赛中两位参赛者的结果
            if (result != -1) rank[2 * i + result].first -= 1;  // 根据比赛结果更新排名
        }
        sort(rank.begin(), rank.end());  // 按照胜场数对参赛者进行排序
    }

    for (auto p : rank) {
        cout << p.second + 1 << endl;  // 输出最终的排名
    }
    return 0;
}
相关推荐
博语小屋5 分钟前
力扣11.盛水最多的容器(medium)
算法·leetcode·职场和发展
Swift社区12 分钟前
LeetCode 423 - 从英文中重建数字
算法·leetcode·职场和发展
点云SLAM40 分钟前
算法与数据结构之二叉树(Binary Tree)
数据结构·算法·二叉树·深度优先·广度优先·宽度优先
小龙报1 小时前
《算法通关指南:算法基础篇 --- 一维前缀和 — 1. 【模板】一维前缀和,2.最大子段和》
c语言·数据结构·c++·算法·职场和发展·创业创新·visual studio
树在风中摇曳2 小时前
LeetCode 1658 | 将 x 减到 0 的最小操作数(C语言滑动窗口解法)
c语言·算法·leetcode
不夜牛仔2 小时前
算法笔记17 - 贪心算法介绍与思路 | 路灯摆放问题 | 活动安排问题 | 最低字典序拼接 | 金条分割问题 | 项目投资问题
笔记·算法·贪心算法
.柒宇.3 小时前
力扣hoT100之找到字符串中所有字母异位词(java版)
java·数据结构·算法·leetcode
松岛雾奈.2303 小时前
机器学习--KNN算法中的距离、范数、正则化
人工智能·算法·机器学习
兮山与3 小时前
算法33.0
算法
Brduino脑机接口技术答疑3 小时前
支持向量机(SVM)在脑电情绪识别中的学术解析与研究进展
人工智能·算法·机器学习·支持向量机·数据分析