A - Four DigitsA - Four Digits
題目大意
給定一個整數N,其范圍在0到9999之間(包含邊界)。在將N轉換為四位數的字符串后,輸出它。如果N的位數不足四位,則在前面添加必要數量的零。
思路分析
可以使用輸出流的格式設置功能來實現這一點。
具體做法是,使用setw(4)和setfill(‘0’)來設置輸出格式,將N輸出為四位數,并在不足四位時用0進行填充。
時間復雜度
O(1)
AC代碼
#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代碼
#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代碼
#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和比賽輪數Mvector<string> S(2 * N); // 存儲所有參賽者的手勢序列for (int i = 0; i < 2 * N; i++) {cin >> S[i]; // 輸入每個參賽者的手勢序列}vector<pair<int, int>> rank(2 * N); // 存儲參賽者的排名和IDfor (int i = 0; i < 2 * N; i++) {rank[i] = make_pair(0, i); // 初始化排名和ID,初始勝場數為0}// rank[i] = [x,y] -> 第(i+1)名參賽者的勝場數為 -x,ID為 yfor (int j = 0; j < M; j++) {for (int i = 0; i < N; i++) {int player1 = rank[2 * i].second; // 第i個比賽對中的第一個參賽者的IDint player2 = rank[2 * i + 1].second; // 第i個比賽對中的第二個參賽者的IDint 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;
}