比赛链接: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. ArrayList源码解析--值得深读

    ArrayList源码解析 基于jdk1.8 ArrayList的定义 类注释 允许put null值,会自动扩容: size isEmpty.get.set.add等方法时间复杂度是O(1): 是非 ...

  2. docker 创建数据卷容器

    数据卷容器 --volumes-from 容器名/id 先起一个容器 docker run -it --name docker01 centos 然后同步 docker01 的数据卷 --volume ...

  3. 【Web】CSS中的浮动float

    CSS中的float 文章目录 CSS中的float 1.float浮动属性 2.float文字环绕图片 3.float浮动的真正原因以及副作用分析 4.清除浮动的四种解决方法 5.实际应用 导航效果 ...

  4. /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh: line 19: mysql: command not found

    [root@test ~]# tail -f /tmp/zabbix_agentd.log /var/lib/zabbix/percona/scripts/get_mysql_stats_wrappe ...

  5. linux系统图形化管理工具

    webmin是一个非常好的图形化管理工具,提供了系统管理员对于linux系统的运维效率.对于那些记不住命令,新入门的新手真的是一个很好的工具呀,上图吧. 这是系统管理的首页,可以看到,CPU,内存.虚 ...

  6. TCP三次握手Linux源码解析

    TCP是面向连接的协议.面向连接的传输层协议在原点和重点之间建立了一条虚拟路径,同属于一个报文的所有报文段都沿着这条虚拟路径发送,为整个报文使用一条虚拟路径能够更容易地实施确认过程以及对损伤或者丢失报 ...

  7. ReactRouter的实现

    ReactRouter的实现 ReactRouter是React的核心组件,主要是作为React的路由管理器,保持UI与URL同步,其拥有简单的API与强大的功能例如代码缓冲加载.动态路由匹配.以及建 ...

  8. 自翻------Office 2013 RT 使用说明

    Office Home and Student 2013 RT Preview的更新 介绍 Microsoft已发布Microsoft Office Home and Student 2013 RT ...

  9. 控制tomcat日志文件的输出到catalina.out

    在catalina.sh中直接把下面的内容注释掉即可:

  10. U盘制作系统启动盘方法

    1.下载一个UltralSO用来把CentOS系统镜像写入U盘作为启动安装盘 U盘用一个空U盘,会格式化的. 下载下来,使用试用版就行 刻录完成.