PAT(乙级)2020年春季考试
比赛链接: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年春季考试的更多相关文章
- PAT(甲级)2017年春季考试
PAT(甲级)2017年春季考试 A.Raffle for Weibo Followers #include<bits/stdc++.h> using namespace std; int ...
- PAT乙级:1094 谷歌的招聘 (20分)
PAT乙级:1094 谷歌的招聘 (20分) 题干 2004 年 7 月,谷歌在硅谷的 101 号公路边竖立了一块巨大的广告牌(如下图)用于招聘.内容超级简单,就是一个以 .com 结尾的网址,而前面 ...
- PAT乙级:1088 三人行 (20分)
PAT乙级:1088 三人行 (20分) 题干 子曰:"三人行,必有我师焉.择其善者而从之,其不善者而改之." 本题给定甲.乙.丙三个人的能力值关系为:甲的能力值确定是 2 位正整 ...
- PAT乙级:1072开学寄语(20分)
PAT乙级:1072开学寄语(20分) 题干 下图是上海某校的新学期开学寄语:天将降大任于斯人也,必先删其微博,卸其 QQ,封其电脑,夺其手机,收其 ipad,断其 wifi,使其百无聊赖,然后,净面 ...
- PAT乙级:1090危险品装箱(25分)
PAT乙级:1090危险品装箱(25分) 题干 集装箱运输货物时,我们必须特别小心,不能把不相容的货物装在一只箱子里.比如氧化剂绝对不能跟易燃液体同箱,否则很容易造成爆炸. 本题给定一张不相容物品的清 ...
- PAT乙级:1053 住房空置率 (20分)
PAT乙级:1053 住房空置率 (20分) 题干 在不打扰居民的前提下,统计住房空置率的一种方法是根据每户用电量的连续变化规律进行判断.判断方法如下: 在观察期内,若存在超过一半的日子用电量低于某给 ...
- PAT乙级:1057 数零壹 (20分)
PAT乙级:1057 数零壹 (20分) 题干 给定一串长度不超过 105 的字符串,本题要求你将其中所有英文字母的序号(字母 a-z 对应序号 1-26,不分大小写)相加,得到整数 N,然后再分析一 ...
- PAT乙级:1069 微博转发抽奖 (20分)
PAT乙级:1069 微博转发抽奖 (20分) 题干 小明 PAT 考了满分,高兴之余决定发起微博转发抽奖活动,从转发的网友中按顺序每隔 N 个人就发出一个红包.请你编写程序帮助他确定中奖名单. 输入 ...
- PAT乙级:1092 最好吃的月饼 (20分)
PAT乙级:1092 最好吃的月饼 (20分) 题干 月饼是久负盛名的中国传统糕点之一,自唐朝以来,已经发展出几百品种. 若想评比出一种"最好吃"的月饼,那势必在吃货界引发一场腥风 ...
随机推荐
- OSTU大津法图像分割
OSTU图像分割 最大类间方差法,也成大津法OSTU,它是按图像的灰度特性,将图像分成背景和目标2部分.背景和目标之间的类间方差越大,说明构成图像的2部分的差别越大,当部分目标错分为背景或部分背景错分 ...
- 借助window.performance实现基本的前端基础性能监控日志
借助window.performance实现基本的前端基础性能监控日志并二次重写console方法方便日常前端console日志的调试 npm install sn-console
- linux中常用服务的安装
安装环境:centos7.5 配置离线yum源参考:https://blog.csdn.net/mayh554024289/article/details/54236336vi /etc/yum.co ...
- spring中的工厂模式
spring的bean的创建原理就是框架利用反射创建出实例对象 工厂模式:工厂帮我们创建对象:有一个专门帮我们创建对象的类,我们把这个类叫做工厂类. 例如:Plane plane = PlaneFac ...
- 在IDEA中通过Module管理多个项目
你身边有没有这种顽固的Eclipse忠实用户:IDEA不能一个窗口管理多个项目!太不方便了! 对于一个窗口同时管理多个项目的需求,在我们日常开发时候是经常需要的.尤其当我们在分布式环境下,在一个窗口中 ...
- 【Problem】前端项目运行:Module build failed:Error Node Sass does not yet support my current environmen
我在运行renren-fast-vue前端项目时,安装完依赖cnpm install 启动服务npm run dev 出现问题. Module build failed: Error: Node Sa ...
- 什么是开发中经常说的'POCO'
什么是开发中经常说的'POCO'Posted By : 蓝狐Updated On : 2015-07-19在看一些EF的文章,经常提到POCO这个词,但是,有没有比较详细的说这个POCO是什么意思呢? ...
- SDUST数据结构 - chap1 绪论
一.判断题: 二.选择题:
- npm i 报错 'match' of undefined 错误以及删除node_modules失败
简单粗暴的解决办法就是一个字'删', 1.先把node_modules给删了 手动删除的话,window系统经常会有部分删不了,说需要个权限什么的,直接用rimraf 就能解决 先安装npm inst ...
- 给dtcms增加模板自动生成功能
作为dtcms的使用者你是不是像我一样,也在不停的修改模板之后要点击生成模板浪费了很多开发模板的时间? 那就跟我一起给dtcms增加一个开发者模式,当模板修改完成之后,直接刷新页面就能看到效果,而不再 ...