比赛链接:https://pintia.cn/market/item/1287964475579875328

7-1 对称日

题解

模拟,注意年月日不足位在前面补零。

代码

#include <bits/stdc++.h>
using namespace std; map<string, string> mp{
{"Jan", "1"},
{"Feb", "2"},
{"Mar", "3"},
{"Apr", "4"},
{"May", "5"},
{"Jun", "6"},
{"Jul", "7"},
{"Aug", "8"},
{"Sep", "9"},
{"Oct", "10"},
{"Nov", "11"},
{"Dec", "12"}
}; bool is_palindrome(const string &s) {
string t(s);
reverse(t.begin(), t.end());
return s == t;
} void solve() {
string m, d, y; cin >> m >> d >> y;
d.pop_back();
if (y.size() < 4) y = string(4 - y.size(), '0') + y;
if (m.size() < 2) m = '0' + m;
if (d.size() < 2) d = '0' + d;
string s = y + mp[m] + d;
cout << (is_palindrome(s) ? 'Y' : 'N') << ' ' << s << "\n";
} int main() {
int t; cin >> t;
while (t--) solve();
}

7-2 超标区间

题解

维护一个元素超过阈值的区间,然后以小于阈值的数为分割点。

代码

#include <bits/stdc++.h>
using namespace std;
int main() {
int n, t; cin >> n >> t;
int a[n + 1] = {};
for (int i = 0; i < n; ++i) {
cin >> a[i];
}
vector<pair<int, int>> res;
int l = 0, r = 0;
for (int i = 0; i <= n; ++i) {
if (a[i] > t) {
if (a[r] > t) {
r = i;
} else {
l = i;
r = i;
}
} else {
if (a[r] > t) {
res.emplace_back(l, r);
}
l = i;
r = i;
}
}
if (!res.empty()) {
for (auto pr : res)
cout << "[" << pr.first << ", " << pr.second << "]" << "\n";
} else {
cout << *max_element(a, a + n) << "\n";
}
}

7-3 钱串子的加法

题解

将两个数去除前导零后统一为同一长度,模拟相加即可,注意进位。

Tips

这题数据似乎卡得不是很严,像去除前导零和计算两个数的和如果用 $O_{(n)}$ 的  s.erase(s.begin())  和  ans = ch + ans 即使总时间复杂度会达到 $O_{(n^2)}$ 也不会超时。只会比下面 $O_{(n)}$ 的代码慢十倍左右。

代码

#include <bits/stdc++.h>
using namespace std; map<char, int> mp1;
map<int, char> mp2; void init() {
int num = 0;
for (char c : string("0123456789abcdefghijklmnopqrst")) mp1[c] = num++;
for (auto pr : mp1) mp2[pr.second] = pr.first;
} void del_lead_zero(string &s) {
reverse(s.begin(), s.end());
while (s.size() > 1 and s.back() == '0') s.pop_back();
reverse(s.begin(), s.end());
} void sum(string &s1, string &s2) {
del_lead_zero(s1);
del_lead_zero(s2);
if (s1.size() < s2.size()) {
swap(s1, s2);
}
s2 = string(s1.size() - s2.size(), '0') + s2;
bool carry = false;
for (int i = s1.size() - 1; i >= 0; --i) {
int sum = mp1[s1[i]] + mp1[s2[i]] + carry;
s1[i] = mp2[sum % 30];
carry = (sum >= 30);
}
if (carry) s1 = "1" + s1;
} int main() {
init();
string s1, s2; cin >> s1 >> s2;
sum(s1, s2);
cout << s1 << "\n";
}

7-4 全素日

题解

模拟。

代码

#include <bits/stdc++.h>
using namespace std; bool isprime(int n) {
if (n <= 1) return false;
for (int i = 2; i * i <= n; ++i)
if (n % i == 0) return false;
return true;
} int main() {
string s; cin >> s;
bool all_prime = true;
for (int i = 0; i < s.size(); ++i) {
string t = s.substr(i);
bool is_prime = isprime(stoi(t));
if (not is_prime) all_prime = false;
cout << t << ' ' << (is ? "Yes" : "No") << "\n";
}
if (all_prime) cout << "All Prime!" << "\n";
}

7-5 裁判机

题解

因为时间复杂度为 $O_{(n^2)}$ 且最多的情况有 $10^4$ 个数,所以不能再用  map 或 set 这类每次操作时间复杂度为 $O_{(log_n)}$ 的容器了,可以使用 $O_{(1)}$ 的散列(数组映射)。

代码

#include <bits/stdc++.h>
using namespace std;
constexpr int N = 1e5 + 100; bool appear[N], sub[N]; int main() {
int t1, t2; cin >> t1 >> t2;
appear[t1] = appear[t2] = true;
sub[abs(t1 - t2)] = true;
int n, m; cin >> n >> m;
int a[n][m] = {};
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
cin >> a[i][j];
}
}
vector<int> res = {t1, t2};
bool out[n] = {};
for (int j = 0; j < m; ++j) {
for (int i = 0; i < n; ++i) {
if (out[i]) continue;
if (appear[a[i][j]] or !sub[a[i][j]]) {
cout << "Round #" << j + 1 << ": " << i + 1 << " is out.\n";
out[i] = true;
continue;
}
for (auto ele : res) sub[abs(a[i][j] - ele)] = true;
res.push_back(a[i][j]);
appear[a[i][j]] = true;
}
}
if (find(out, out + n, false) - out == n) {
cout << "No winner.";
} else {
cout << "Winner(s):";
for (int i = 0; i < n; ++i)
if (not out[i]) cout << ' ' << i + 1;
}
}

PAT(乙级)2020年春季考试的更多相关文章

  1. PAT(甲级)2017年春季考试

    PAT(甲级)2017年春季考试 A.Raffle for Weibo Followers #include<bits/stdc++.h> using namespace std; int ...

  2. PAT乙级:1094 谷歌的招聘 (20分)

    PAT乙级:1094 谷歌的招聘 (20分) 题干 2004 年 7 月,谷歌在硅谷的 101 号公路边竖立了一块巨大的广告牌(如下图)用于招聘.内容超级简单,就是一个以 .com 结尾的网址,而前面 ...

  3. PAT乙级:1088 三人行 (20分)

    PAT乙级:1088 三人行 (20分) 题干 子曰:"三人行,必有我师焉.择其善者而从之,其不善者而改之." 本题给定甲.乙.丙三个人的能力值关系为:甲的能力值确定是 2 位正整 ...

  4. PAT乙级:1072开学寄语(20分)

    PAT乙级:1072开学寄语(20分) 题干 下图是上海某校的新学期开学寄语:天将降大任于斯人也,必先删其微博,卸其 QQ,封其电脑,夺其手机,收其 ipad,断其 wifi,使其百无聊赖,然后,净面 ...

  5. PAT乙级:1090危险品装箱(25分)

    PAT乙级:1090危险品装箱(25分) 题干 集装箱运输货物时,我们必须特别小心,不能把不相容的货物装在一只箱子里.比如氧化剂绝对不能跟易燃液体同箱,否则很容易造成爆炸. 本题给定一张不相容物品的清 ...

  6. PAT乙级:1053 住房空置率 (20分)

    PAT乙级:1053 住房空置率 (20分) 题干 在不打扰居民的前提下,统计住房空置率的一种方法是根据每户用电量的连续变化规律进行判断.判断方法如下: 在观察期内,若存在超过一半的日子用电量低于某给 ...

  7. PAT乙级:1057 数零壹 (20分)

    PAT乙级:1057 数零壹 (20分) 题干 给定一串长度不超过 105 的字符串,本题要求你将其中所有英文字母的序号(字母 a-z 对应序号 1-26,不分大小写)相加,得到整数 N,然后再分析一 ...

  8. PAT乙级:1069 微博转发抽奖 (20分)

    PAT乙级:1069 微博转发抽奖 (20分) 题干 小明 PAT 考了满分,高兴之余决定发起微博转发抽奖活动,从转发的网友中按顺序每隔 N 个人就发出一个红包.请你编写程序帮助他确定中奖名单. 输入 ...

  9. PAT乙级:1092 最好吃的月饼 (20分)

    PAT乙级:1092 最好吃的月饼 (20分) 题干 月饼是久负盛名的中国传统糕点之一,自唐朝以来,已经发展出几百品种. 若想评比出一种"最好吃"的月饼,那势必在吃货界引发一场腥风 ...

随机推荐

  1. docker进入mysql数据库并进行导入 导出

    一:导入 1.首先查看docker运行的容器: docker ps 2.将宿主机文件拷贝到docker容器中: docker cp 2020415.sql af491d5466ea:/opt/2020 ...

  2. ReentrantLock-源码解析

    ReentrantLock类注释 1.可重入互斥锁,意思是表示该锁能够支持一个线程对资源的重复加锁,该锁还支持获取锁的公平和非公平性选择.synchronized关键字隐式的支持重进入. 2.可以通过 ...

  3. JPEG解码--(1)JPEG文件格式概览

    由于懒和人的忘性,以前做的一些笔记再回过头看时又有些生疏了,我决定把一些内容整理出来,以供有需要的来参考. 了解的人知道其价值所在,不知道的人就弃之如废物吧. 本篇是JPEG解码系列的第一篇--JPE ...

  4. 使用Jenkins+Blue Ocean 持构建自动化部署之安卓源码打包、测试、邮件通知

    什么是BlueOcean? BlueOcean重新考虑了Jenkins的用户体验.BlueOcean由Jenkins Pipeline设计,但仍然兼容自由式工作,减少了团队成员的混乱,增加了清晰度. ...

  5. JavaScript入门-函数function(二)

    JavaScript入门-函数function(二) 递归函数 什么是递归函数? 递归简单理解就是,在函数体里,调用自己. //我们在求一个10的阶乘的时候,可能会这么做 //写一个循环 var to ...

  6. 学习rac管理

    文章转自:http://blog.itpub.net/7728585/viewspace-752185/ crsctl query crs activeversion 查看版本 ocrconfig - ...

  7. 【Oracle】重命名表空间

    将表空间重新命名 SQL>   alter tablespace 原名 rename to 新名; 在查看下是否命名成功 SQL> select tablespace_name from ...

  8. 使用 gRPC-UI 调试.NET 5的gPRC服务

    在上一篇文章中,我介绍了gRPCurl一个命令行工具,该工具可用于测试gRPC服务的端点,在本文中,我将向您介绍 gRPC-ui, 它可以作为Web工具使用,有点像Postman,但用于gRPC AP ...

  9. 2V转5V输出,2.4V转5V输出,DC-DC同步整流升压电路

    PW5100可以适用于2V转5V和2.4V转5V的应用电路中,PW5100是一颗DC-DC的同步升压转换器芯片. PW5100特点: 1, 低输入,宽范围:0.7V-5V 2, 输出电压固定,外围少: ...

  10. Linq.Expressions扩展ExpressionExtension

    手上有一个以前项目用到的.NET工具类封装的DLL. 正好又想试一下动态LAMBDA表达式,用.NET Reflector看一下源码. public static class ExpressionEx ...