1039 到底买不买
分数 20
作者 CHEN, Yue
单位 浙江大学
小红想买些珠子做一串自己喜欢的珠串。卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖。于是小红要你帮忙判断一下,某串珠子里是否包含了全部自己想要的珠子?如果是,那么告诉她有多少多余的珠子;如果不是,那么告诉她缺了多少珠子。
为方便起见,我们用[0-9]、[a-z]、[A-Z]范围内的字符来表示颜色。例如在图1中,第3串是小红想做的珠串;那么第1串可以买,因为包含了全部她想要的珠子,还多了8颗不需要的珠子;第2串不能买,因为没有黑色珠子,并且少了一颗红色的珠子。
图 1
输入格式:
每个输入包含 1 个测试用例。每个测试用例分别在 2 行中先后给出摊主的珠串和小红想做的珠串,两串都不超过 1000 个珠子。
输出格式:
如果可以买,则在一行中输出
Yes以及有多少多余的珠子;如果不可以买,则在一行中输出No以及缺了多少珠子。其间以 1 个空格分隔。输入样例 1:
ppRYYGrrYBR2258 YrR8RrY输出样例 1:
Yes 8输入样例 2:
ppRYYGrrYB225 YrR8RrY输出样例 2:
No 2
#include<iostream>
#include<string>
#include<vector>
#include<map>
using namespace std;
int main() {
string s1, s2;
cin >> s1 >> s2;
map<char, int> arr;
for (char c : s1) {
arr[c]++;
}
int t = 0;
for (char c : s2) {
arr[c]--;
if (arr[c] < 0) {
t++;
}
}
if (t > 0) {
cout << "No " << t << endl;
}
else {
cout << "Yes " << s1.size() - s2.size() << endl;
}
return 0;
}
1031 查验身份证
分数 15
作者 CHEN, Yue
单位 浙江大学
一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:
首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然后将计算的和对11取模得到值
Z;最后按照以下关系对应Z值与校验码M的值:Z:0 1 2 3 4 5 6 7 8 9 10 M:1 0 X 9 8 7 6 5 4 3 2现在给定一些身份证号码,请你验证校验码的有效性,并输出有问题的号码。
输入格式:
输入第一行给出正整数N(≤100)是输入的身份证号码的个数。随后N行,每行给出1个18位身份证号码。
输出格式:
按照输入的顺序每行输出1个有问题的身份证号码。这里并不检验前17位是否合理,只检查前17位是否全为数字且最后1位校验码计算准确。如果所有号码都正常,则输出
All passed。输入样例1:
4 320124198808240056 12010X198901011234 110108196711301866 37070419881216001X输出样例1:
12010X198901011234 110108196711301866 37070419881216001X输入样例2:
2 320124198808240056 110108196711301862输出样例2:
All passed
#include<iostream>
#include<vector>
#include<map>
#include<string>
using namespace std;
int main() {
vector<int> weight = { 7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2 };
map<int, char> check = {
{0,'1'},{1,'0'},{2,'X'},{3,'9'},{4,'8'},{5,'7'},{6,'6'},
{7,'5'},{8,'4'},{9,'3'},{10,'2'}
};
int n;
cin >> n;
vector<string> r;
for (int j = 0; j < n; j++) {
string s;
cin >> s;
int sum = 0;
int f = 1;
for (int i = 0; i < s.size() - 1; i++) {
if (s[i] >= '0' && s[i] <= '9') {
sum += (s[i] - '0') * weight[i];
}
else {
r.push_back(s);
f = 0;
break;
}
}
if (f == 1) {
int z = sum % 11;
char m = check[z];
if (m != s[s.size() - 1]) {
r.push_back(s);
}
}
}
if (r.size() == 0) {
cout << "All passed" << endl;
}
else {
for (string i : r) {
cout << i << endl;
}
}
return 0;
}
1032 挖掘机技术哪家强
分数 20
作者 CHEN, Yue
单位 浙江大学
为了用事实说明挖掘机技术到底哪家强,PAT 组织了一场挖掘机技能大赛。现请你根据比赛结果统计出技术最强的那个学校。
输入格式:
输入在第 1 行给出不超过 105 的正整数 N,即参赛人数。随后 N 行,每行给出一位参赛者的信息和成绩,包括其所代表的学校的编号(从 1 开始连续编号)、及其比赛成绩(百分制),中间以空格分隔。
输出格式:
在一行中给出总得分最高的学校的编号、及其总分,中间以空格分隔。题目保证答案唯一,没有并列。
输入样例:
6 3 65 2 80 1 100 2 70 3 40 3 0输出样例:
2 150
#include<iostream>
#include<unordered_map>
#include<vector>
using namespace std;
int main() {
int n;
cin >> n;
unordered_map<int, int> arr;
for (int i = 0; i < n; i++) {
int a, b;
cin >> a >> b;
arr[a] += b;
}
int p = 1;
int q = 0;
for (auto& t : arr) {
if (t.second > q) {
q = t.second;
p = t.first;
}
}
cout << p << " " << q << endl;
return 0;
}

215






