比赛链接: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. Flutter 布局类组件:简介

    前言 布局类组件都会包含一个或多个子组件,不同的布局类组件对子组件排版(layout)方式不同. 我们知道,Element树才是最终的绘制树,Element树是通过Widget树来创建的(通过Widg ...

  2. 【原创】X86_64汇编、寄存器、内嵌汇编

    整理的X86_64/X86汇编.寄存器.C内嵌汇编笔记,主要用于查阅使用. 目录 一.汇编语言 二.指令 数据传输指令 栈操作指令 push pop 运算指令 位操作 比较操作指令 标志寄存器 流控制 ...

  3. 【Oracle】sum(..) over(..)用法分析

    今天再看sql优化详解的时候,提到了一个sum(..) over(..) 于是自己实验并在网上找了相关的一些文章来看 下面创建一张表: create sequence xulie increment ...

  4. SAP RFC的相关的术语说明

    工作比较忙,很少有时间写点文章,抽空写点吧,给需要的人看看,虽然徒弟很多了,不过还是不要固步自封,在这里也指导更多的人进步吧. RFC(Remote Function Call)是SAP系统和其他(S ...

  5. SAP下载文档为乱码

    通过事物WE60下载的文档为乱码,主要原因是编码格式的不匹配,通常默认的编码格式为ANSI编码,那么我们需要将源码的编码格式转换成UTF-8,这样问题可以解决了.   附:编码格式介绍 不同的国家和地 ...

  6. js中常用追加元素的几种方法

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. python_mmdt:从0到1--实现简单恶意代码分类器(二)

    概述 上篇文章python_mmdt:一种基于敏感哈希生成特征向量的python库(一)我们介绍了一种叫mmdt_hash(敏感哈希)生成方法,并对其中的概念做了基本介绍.本篇,我们重点谈谈mmdt_ ...

  8. ovs-fields

    1. 字段匹配 精确匹配 field=value,如,nw_src=10.1.2.3. 按位匹配 field=value/mask,如,nw_src=10.1.0.0/255.255.0.0,nw_s ...

  9. ftp上传文件出现553 Could not creat files 严重文件传输错误

    之前上传文件到云服务器上一直出错,发现可以下载但是不能上传和编辑,后来终于找到原因了,是因为上传文件所在文件夹默认只有root用户才有写权限,所以我们还要将写权限赋予给其他用户.可以用Xshell 5 ...

  10. ADB 基本命令

    ADB很强大,记住一些ADB命令有助于提高工作效率. 获取序列号: adb get-serialno 查看连接计算机的设备: adb devices 重启机器: adb reboot 重启到bootl ...