寫在前面
程式碼需要手動展開!!!
自己VP了一下CAIP高職組省賽
評價:題目十分簡單,半小時AK,沒什麼知識點,全是語法題和模擬題
T1
輸入樣例:
無
輸出樣例:
wo3 ai4 pin1 ti2 a !
沒啥好說的,直接輸出
點選檢視程式碼
#include<bits/stdc++.h>
#define all(x) (x).begin(), (x).end()
#define fi first
#define se second
#define lowbit(x) (x) & (-x)
using i64 = long long;
using pii = std::pair<int, int>;
void solve()
{
std::cout << "wo3 ai4 pin1 ti2 a !\n";
}
int main()
{
std::cin.tie(nullptr);
std::cout.tie(nullptr);
std::ios::sync_with_stdio(false);
int T = 1;
//std::cin >> T;
while (T --) solve();
return 0;
}
T2
輸入樣例1:
99 66
輸出樣例1:
Ba!
33
輸入樣例2:
55 77
輸出樣例2:
Suan4 le ba.
22
比較一下,然後按要求輸出即可,差值直接用abs
點選檢視程式碼
#include<bits/stdc++.h>
#define all(x) (x).begin(), (x).end()
#define fi first
#define se second
#define lowbit(x) (x) & (-x)
using i64 = long long;
using pii = std::pair<int, int>;
void solve()
{
int a, b;
std::cin >> a >> b;
if (a >= b) {
std::cout << "Ba!\n";
}
else {
std::cout << "Suan4 le ba.\n";
}
std::cout << std::abs(a - b) << '\n';
}
int main()
{
std::cin.tie(nullptr);
std::cout.tie(nullptr);
std::ios::sync_with_stdio(false);
int T = 1;
//std::cin >> T;
while (T --) solve();
return 0;
}
T3
輸入樣例:
7
85 -90 110 95 112 -120 -70
輸出樣例:
Suan4 le ba.
3
統計一下正負數的數量,輸出min
點選檢視程式碼
#include<bits/stdc++.h>
#define all(x) (x).begin(), (x).end()
#define fi first
#define se second
#define lowbit(x) (x) & (-x)
using i64 = long long;
using pii = std::pair<int, int>;
void solve()
{
int n;
std::cin >> n;
int cnt1 = 0, cnt2 = 0;
for (int i = 0; i < n; i ++) {
int x;
std::cin >> x;
if (x < 0) {
cnt1 ++;
}
else {
cnt2 ++;
}
}
std::cout << std::min(cnt1, cnt2) << '\n';
}
int main()
{
std::cin.tie(nullptr);
std::cout.tie(nullptr);
std::ios::sync_with_stdio(false);
int T = 1;
//std::cin >> T;
while (T --) solve();
return 0;
}
T4
輸入樣例1:
abcdefg
輸出樣例1:
fgceab
輸入樣例2:
abcdefgh
輸出樣例2:
fgdebc
按題目要求對字串進行操作
第一步可以用reverse
第二步可以用substr
第三步直接遍歷然後swap就可以
點選檢視程式碼
#include<bits/stdc++.h>
#define all(x) (x).begin(), (x).end()
#define fi first
#define se second
#define lowbit(x) (x) & (-x)
using i64 = long long;
using pii = std::pair<int, int>;
void solve()
{
std::string s;
std::cin >> s;
std::reverse(all(s));
int n = s.size();
if (n & 1) {
s = s.substr(0, n / 2) + s.substr(n / 2 + 1);
}
else {
s = s.substr(1, n - 2);
}
for (int j = 0; j < s.size(); j += 2) {
std::swap(s[j], s[j + 1]);
}
std::cout << s << '\n';
}
int main()
{
std::cin.tie(nullptr);
std::cout.tie(nullptr);
std::ios::sync_with_stdio(false);
int T = 1;
//std::cin >> T;
while (T --) solve();
return 0;
}
T5
輸入樣例:
2 4 3
30 45
10 15 5 20
60 25 40
08:30 11:40 4
7 T1 Z2 P4 T3 P1 P2 Z1
4 Z1 P1 P2 P3
5 P4 P2 Z1 P3 T2
6 Z2 P3 P3 P1 T1 P3
輸出樣例:
No
No
Yes
Yes
先存下來每道菜所需要的用時
用scanf輸入起止時間
算出來總時間T
對於每次詢問
算出來做這些菜需要的時間t是否小於等於T、是否滿足主菜、配菜、湯都有,可以用set維護。
似乎唯一要注意的點就是cin和scanf混用,別關同步流
點選檢視程式碼
#include<bits/stdc++.h>
#define all(x) (x).begin(), (x).end()
#define fi first
#define se second
#define lowbit(x) (x) & (-x)
using i64 = long long;
using pii = std::pair<int, int>;
void solve()
{
int n1, n2, n3;
std::cin >> n1 >> n2 >> n3;
std::vector<int> a(n1), b(n2), c(n3);
for (int i = 0; i < n1; i ++) {
std::cin >> a[i];
}
for (int i = 0; i < n2; i ++) {
std::cin >> b[i];
}
for (int i = 0; i < n3; i ++) {
std::cin >> c[i];
}
int hh1, mm1, hh2, mm2;
scanf("%d:%d", &hh1, &mm1);
scanf("%d:%d", &hh2, &mm2);
int q;
std::cin >> q;
int time = (hh2 * 60 + mm2) - (hh1 * 60 + mm1);
while (q --) {
auto calc = [&](std::string s) -> int {
int x = 0;
for (auto c : s) {
x = (x * 10 + c - '0');
}
return x - 1;
};
int m;
std::cin >> m;
int sum = 0;
std::set<char> cnt;
for (int i = 0; i < m; i ++) {
std::string s;
std::cin >> s;
int x = calc(s.substr(1));
if (s[0] == 'Z') {
sum += a[x];
}
if (s[0] == 'P') {
sum += b[x];
}
if (s[0] == 'T') {
sum += c[x];
}
cnt.insert(s[0]);
}
if (sum > time || cnt.size() != 3) {
std::cout << "No\n";
}
else {
std::cout << "Yes\n";
}
}
}
int main()
{
// std::cin.tie(nullptr);
// std::cout.tie(nullptr);
// std::ios::sync_with_stdio(false);
int T = 1;
//std::cin >> T;
while (T --) solve();
return 0;
}
T6
輸入樣例:
5 3
500 200 800 30 180
15 0 35 2 20 35
180 0 10 80 67 50
88 0 0 28 10 0
1 0 1 1 5 1
100 0 57 80 100 77
輸出樣例:
467
73*
730
25
80*
統計一下每種書借出的數量,取max,剩下的總數,直接計算即可
輸出每個書剩下的數量,然後判斷這個書借出的數量是否與max相等
點選檢視程式碼
#include<bits/stdc++.h>
#define all(x) (x).begin(), (x).end()
#define fi first
#define se second
#define lowbit(x) (x) & (-x)
using i64 = long long;
using pii = std::pair<int, int>;
void solve()
{
int n, d;
std::cin >> n >> d;
std::vector<int> a(n);
std::vector<int> cnt(n);
for (int i = 0; i < n; i ++) {
std::cin >> a[i];
}
int max = 0;
for (int i = 0; i < n; i ++) {
for (int j = 0; j < d; j ++) {
int x, y;
std::cin >> x >> y;
cnt[i] += x;
a[i] = a[i] - x + y;
}
max = std::max(max, cnt[i]);
}
for (int i = 0; i < n; i ++) {
std::cout << a[i];
if (cnt[i] == max) {
std::cout << "*\n";
}
else {
std::cout << '\n';
}
}
}
int main()
{
std::cin.tie(nullptr);
std::cout.tie(nullptr);
std::ios::sync_with_stdio(false);
int T = 1;
//std::cin >> T;
while (T --) solve();
return 0;
}
T7
輸入樣例:
3
RH0ABP1
RH0APY
BPYORH0
9
BPYORH1
RH0ABP2
RH0APY
APYORH0
RH0OPY
BPYORH0
RH1APY
RH0APY
ABPYRH0
輸出樣例:
001001010
33.33
RH0APY
用set維護哪些血是熊貓血,用map維護每種熊貓血的查詢次數
按要求輸出答案即可
點選檢視程式碼
#include<bits/stdc++.h>
#define all(x) (x).begin(), (x).end()
#define fi first
#define se second
#define lowbit(x) (x) & (-x)
using i64 = long long;
using pii = std::pair<int, int>;
void solve()
{
int n;
std::cin >> n;
std::map<std::string, int> mp;
std::set<std::string> st;
for (int i = 0; i < n; i ++) {
std::string s;
std::cin >> s;
st.insert(s);
}
int max = 0;
int q;
std::cin >> q;
std::string ans;
while (q --) {
std::string s;
std::cin >> s;
if (st.count(s)) {
ans.push_back('1');
mp[s] ++;
max = std::max(max, mp[s]);
}
else {
ans.push_back('0');
}
}
std::cout << ans << '\n';
std::cout << std::fixed << std::setprecision(2) << 100.0 * std::count(all(ans), '1') / ans.size() << '\n';
for (auto [s, cnt] : mp) {
if (cnt == max) {
std::cout << s << '\n';
}
}
}
int main()
{
std::cin.tie(nullptr);
std::cout.tie(nullptr);
std::ios::sync_with_stdio(false);
int T = 1;
//std::cin >> T;
while (T --) solve();
return 0;
}