pat

PAT B1041 考试座位号

杀马特。学长 韩版系。学妹 提交于 2019-11-28 06:29:34
PAT B1041 考试座位号 题目描述:   每个 PAT 考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位。正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试时考生需要换到考试座位就座。但有些考生迟到了,试机已经结束,他们只能拿着领到的试机座位号码求助于你,从后台查出他们的考试座位号码。    输入格式:   输入第一行给出一个正整数 N(≤1000),随后 N 行,每行给出一个考生的信息:准考证号 试机座位号 考试座位号。其中准考证号由 16 位数字组成,座位从 1 到 N 编号。输入保证每个人的准考证号都不同,并且任何时候都不会把两个人分配到同一个座位上。   考生信息之后,给出一个正整数 M(≤N),随后一行中给出 M 个待查询的试机座位号码,以空格分隔。    输出格式:   对应每个需要查询的试机座位号码,在一行中输出对应考生的准考证号和考试座位号码,中间用 1 个空格分隔。    输入样例:    4   3310120150912233 2 4   3310120150912119 4 1   3310120150912126 1 3   3310120150912002 3 2   2   3 4    输出样例:    3310120150912002 2  

PAT B1026 程序运行时间

一笑奈何 提交于 2019-11-28 01:50:05
PAT B1026 程序运行时间 题目描述:   要获得一个 C 语言程序的运行时间,常用的方法是调用头文件 time.h,其中提供了 clock() 函数,可以捕捉从程序开始运行到 clock() 被调用时所耗费的时间。这个时间单位是 clock tick,即“时钟打点”。同时还有一个常数 CLK_TCK,给出了机器时钟每秒所走的时钟打点数。于是为了获得一个函数 f 的运行时间,我们只要在调用 f 之前先调用 clock(),获得一个时钟打点数 C1;在 f 执行完成后再调用 clock(),获得另一个时钟打点数 C2;两次获得的时钟打点数之差 (C2-C1) 就是 f 运行所消耗的时钟打点数,再除以常数 CLK_TCK,就得到了以秒为单位的运行时间。   这里不妨简单假设常数 CLK_TCK 为 100。现给定被测函数前后两次获得的时钟打点数,请你给出被测函数运行的时间。       输入格式:   输入在一行中顺序给出 2 个整数 C1 和 C2。注意两次获得的时钟打点数肯定不相同,即 C1 < C2,并且取值在 [0,10​7​​]。       输出格式:   在一行中输出被测函数运行的时间。运行时间必须按照 hh:mm:ss(即2位的 时:分:秒)格式输出;不足 1 秒的时间四舍五入到秒。       输入样例:    123 4577973    输出样例:   

PAT Basic 1040 有几个PAT

送分小仙女□ 提交于 2019-11-28 01:14:08
PAT BASIC 1040 有几个PAT 字符串 APPAPT 中包含了两个单词 PAT ,其中第一个 PAT 是第 2 位( P ),第 4 位( A ),第 6 位( T );第二个 PAT 是第 3 位( P ),第 4 位( A ),第 6 位( T )。 现给定字符串,问一共可以形成多少个 PAT ? 输入格式: 输入只有一行,包含一个字符串,长度不超过105,只包含 P 、 A 、 T 三种字母。 输出格式: 在一行中输出给定字符串中包含多少个 PAT 。由于结果可能比较大,只输出对 1000000007 取余数的结果。 输入样例: APPAPT 输出样例: 2 记录一下自己的思考过程。 一开始O(n^3)的算法自然是第一个排除的,不用测都知道会超时。从P出发去考虑问题,那么只要知道每一个A的位置后面有多少个 T,就只需要对所有的P和A遍历即可,但是O(n^2)也还是不够快,那就要从A去考虑, 对于每一个A,可能的排列数量等于 这个A之前P的数量乘上这个A之后T的数量 ,这样就能得到线性时间的解法。 具体做法可以是 先遍历一次整个字符串,累加得到T的数量。再遍历一次,遇到P时 P++,遇到T时T–,遇到A时计算。 # include <stdio.h> # include <stdlib.h> # include <string.h> int main ( ) {

PAT Basic 1003 我要通过! (20 分)

守給你的承諾、 提交于 2019-11-27 18:22:35
“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于 PAT 的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。 得到“答案正确”的条件是: 字符串中必须仅有 P 、 A 、 T 这三种字符,不可以包含其它字符; 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串; 如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 a 、 b 、 c 均或者是空字符串,或者是仅由字母 A 组成的字符串。 现在就请你为 PAT 写一个自动裁判程序,判定哪些字符串是可以获得“答案正确”的。 输入格式: 每个测试输入包含 1 个测试用例。第 1 行给出一个正整数 n ( <),是需要检测的字符串个数。接下来每个字符串占一行,字符串长度不超过 100,且不包含空格。 输出格式: 每个字符串的检测结果占一行,如果该字符串可以获得“答案正确”,则输出 YES ,否则输出 NO 。 输入样例: 8 PAT PAAT AAPATAA AAPAATAAAA xPATx PT Whatever APAAATAA 输出样例: YES YES YES YES NO NO NO NO #include <iostream> using namespace std; int main()

PAT 1074 宇宙无敌加法器 C语言实现

我们两清 提交于 2019-11-27 18:16:02
地球人习惯使用十进制数,并且默认一个数字的每一位都是十进制的。而在 PAT 星人开挂的世界里,每个数字的每一位都是不同进制的,这种神奇的数字称为“PAT数”。每个 PAT 星人都必须熟记各位数字的进制表,例如“……0527”就表示最低位是 7 进制数、第 2 位是 2 进制数、第 3 位是 5 进制数、第 4 位是 10 进制数,等等。每一位的进制 d 或者是 0(表示十进制)、或者是 [2,9] 区间内的整数。理论上这个进制表应该包含无穷多位数字,但从实际应用出发,PAT 星人通常只需要记住前 20 位就够用了,以后各位默认为 10 进制。 在这样的数字系统中,即使是简单的加法运算也变得不简单。例如对应进制表“0527”,该如何计算“6203 + 415”呢?我们得首先计算最低位:3 + 5 = 8;因为最低位是 7 进制的,所以我们得到 1 和 1 个进位。第 2 位是:0 + 1 + 1(进位)= 2;因为此位是 2 进制的,所以我们得到 0 和 1 个进位。第 3 位是:2 + 4 + 1(进位)= 7;因为此位是 5 进制的,所以我们得到 2 和 1 个进位。第 4 位是:6 + 1(进位)= 7;因为此位是 10 进制的,所以我们就得到 7。最后我们得到:6203 + 415 = 7201。 输入格式: 输入首先在第一行给出一个 N 位的进制表(0 < N ≤ 20)

浙大 PAT 甲级 1031 Hello World for U 排版题总结

孤街醉人 提交于 2019-11-27 13:40:00
和1001题类似,它们都属于排版题。排版题不再把注意力放到处理输入的数据当中,而对输出作特别的关注。(《王道论坛机试指南》)针对这些题目,掌握C的printf/scanf,C++的cin/cout至关重要,记清楚对格式的控制。根据目前为止所做的PAT题目,总结了几个常用的小技巧: printf("%03d",ans) %后加上03代表用0将输出(左边)填充为三位数,016代表左零填充为16位数,以此类推。在有些固定的数据,比如固定7位的学号,都是数字,用字符数组显得麻烦,所以经常直接用int来存储学号。但是有些学号是以0开头的,如果直接输出则会出错。这一点在PAT题目里出现过很多次。 printf("%.3f",ans) %后加上.3f代表输出为小数点后保留3位的浮点数,这里是截断,不是四舍五入。 开辟字符型数组时永远多开辟几个单元,因为如果后面没有地方存储0时,直接用printf("%s",ans)会不知道在何处截止,后面会输出很多无关的多余乱码。 如果要读取一整行含空格的字符串,使用cin.getline。或者string.getline(...). cin、cin.getline等使用时要查清楚对于空格、换行符的处理,这里涉及到缓冲区等问题,很容易出错,需要进行细致的了解。网上有很多讲解,可以系统地学习一下。 C语言中的strtok函数可以用于分割字符串,具体用法请查函数原型

[PAT Basic] 1003.我要通过!

∥☆過路亽.° 提交于 2019-11-27 11:14:26
1003 我要通过! (20 分) 题目来源 “答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于 PAT 的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。 得到“答案正确”的条件是: 字符串中必须仅有 P 、 A 、 T 这三种字符,不可以包含其它字符; 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串; 如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 a 、 b 、 c 均或者是空字符串,或者是仅由字母 A 组成的字符串。 现在就请你为 PAT 写一个自动裁判程序,判定哪些字符串是可以获得“答案正确”的。 输入格式: 每个测试输入包含 1 个测试用例。第 1 行给出一个正整数 n < 10 ,是需要检测的字符串个数。接下来每个字符串占一行,字符串长度不超过 100,且不包含空格。 输出格式: 每个字符串的检测结果占一行,如果该字符串可以获得“答案正确”,则输出 YES ,否则输出 NO 。 输入样例: 8 PAT PAAT AAPATAA AAPAATAAAA xPATx PT Whatever APAAATAA 输出样例: YES YES YES YES NO NO NO NO 分析: 只能有一个P一个T 对于 xPATx,PAT,

PAT乙级1057

帅比萌擦擦* 提交于 2019-11-27 05:54:14
1057 数零壹 (20 分) 给定一串长度不超过 1 0 ​ 5 ​​ 的字符串,本题要求你将其中所有英文字母的序号(字母 a-z 对应序号 1-26,不分大小写)相加,得到整数 N,然后再分析一下 N 的二进制表示中有多少 0、多少 1。例如给定字符串 PAT (Basic) ,其字母序号之和为:16+1+20+2+1+19+9+3=71,而 71 的二进制是 1000111,即有 3 个 0、4 个 1。 输入格式: 输入在一行中给出长度不超过 1 0 ​ 5 ​​、以回车结束的字符串。 输出格式: 在一行中先后输出 0 的个数和 1 的个数,其间以空格分隔。 输入样例: PAT (Basic) 输出样例: 3 4 1 #include<iostream> 2 #include<stdio.h> 3 #include<string.h> 4 #include<algorithm> 5 #include<cmath> 6 int sum,one,zero; 7 using namespace std; 8 void change(int sum){ 9 while(sum){ 10 if(sum%2) 11 one++; 12 else 13 zero++; 14 sum/=2; 15 } 16 cout<<zero<<" "<<one; 17 } 18 int main()

PAT乙级1038

白昼怎懂夜的黑 提交于 2019-11-26 20:30:25
题目链接 https://pintia.cn/problem-sets/994805260223102976/problems/994805284092887040 题解一 这份代码最后一个点会超时 // PAT BasicLevel 1038 // https://pintia.cn/problem-sets/994805260223102976/problems/994805284092887040 #include <iostream> #include <algorithm> using namespace std; int main() { // n个学生及其分数 int n; cin >> n; int *scores = new int[n]; for(int i=0;i<n;++i){ cin >> scores[i]; } // k个查询的分数 int k,search; cin >> k; while(k--){ cin >> search; cout << count(scores, scores + n, search); if(k) cout << ' '; } // 释放内存 delete[] scores; //system("pause"); return 0; } 题解二 这个所有点都过了。用数组存储各分数学生数量,下标是分数,数组元素值是数量。

1040 有几个PAT (25 分)

有些话、适合烂在心里 提交于 2019-11-26 20:01:36
题目: 1040 有几个PAT (25 分) 思路: 是个规律题,只要找到规律就有思路,那代码基本就有了,就是怎么实现比较好和是否简洁的问题。 很明显:A是分水岭,A前面有多少个P和A后面有多少个T知道的话,那有几个PAT就是 P的个数*T的个数 的问题了。 总个数为前面所有A所在位置能构成的PAT数+现在A所在位置能构成的PAT数。 详情代码。 代码: 1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #include <sstream> 5 #include <cmath> 6 #include <algorithm> 7 #include <string> 8 #include <stack> 9 #include <queue> 10 #include <vector> 11 #include <map> 12 using namespace std; 13 const int mod = 1000000007; 14 15 int main() 16 { 17 string s; 18 cin >> s; 19 int cntt = 0, cntp = 0, sum = 0; 20 for(int i = 0; i < s.length(); i++) 21 { 22 if(s[i] ==