PAT 2019 春
算是第二次做这套题吧,感觉从上次考试到现在自己有了挺大提高,提前30min做完了。
7-1 Sexy Primes
读懂题意就行。
#include <cstdio>
#include <iostream>
#include <cmath>
#include <algorithm>
#include <vector> using namespace std;
bool isPrime(int n)
{
if(n < )
return false;
int tmpNum = (int)sqrt(1.0*n);
for(int i = ; i <= tmpNum; ++ i)
{
if(n % i == )
return false;
}
return true;
}
int main()
{
int tmpNum, prime1 = -;
cin >> tmpNum;
if(isPrime(tmpNum))
{
if(tmpNum > && isPrime(tmpNum-))
prime1 = tmpNum-;
else if(isPrime(tmpNum+))
prime1 = tmpNum + ;
}
prime1 == - ? cout << "No" << endl : cout << "Yes" << endl;
for(int i = tmpNum-; prime1 == -;i ++)
{
if(isPrime(i) && isPrime(i+))
{
if(i > tmpNum)
prime1 = i;
else
prime1 = i +;
} }
cout << prime1;
return ;
}
7-2 Anniversary
也是读懂题意就行。
#include <cstdio>
#include <iostream>
#include <cmath>
#include <algorithm>
#include <vector>
#include <unordered_map>
#include <string>
#include <cstdlib>
using namespace std;
unordered_map<string, int> alumFlagMap;
int main()
{
int n, tmpNum, oldGuestNum = , oldAlumNum = ;
string tmpStr, oldGuest, oldAlum;
cin >> n;
while(n--)
{
cin >> tmpStr;
alumFlagMap[tmpStr] = ;
}
cin >> n;
int cnt = ;
while(n--)
{
cin >> tmpStr;
if(alumFlagMap[tmpStr] > )
{
tmpNum = atoi(tmpStr.substr(,).c_str());
if(tmpNum < oldAlumNum)
{
oldAlumNum = tmpNum;
oldAlum = tmpStr;
}
cnt ++;
}
else
{
tmpNum = atoi(tmpStr.substr(,).c_str());
if(tmpNum < oldGuestNum)
{
oldGuestNum = tmpNum;
oldGuest = tmpStr;
}
}
}
cout << cnt << endl;
cnt == ? cout << oldGuest << endl : cout << oldAlum << endl; return ;
}
7-3 Telefraud Detection
这道题目理清条件就行,先找到嫌疑人,在根据嫌疑人找团伙,团伙进行并查集处理。
1.嫌疑人:给大于K个人打短电话,且不超过20%的人回拨。
2.团伙:两个嫌疑人互相打过电话。
3.短电话:A拨打B电话的总时长不超过5分钟,认为A向B打短电话。
#include <cstdio>
#include <iostream>
#include <cmath>
#include <algorithm>
#include <vector>
#include <unordered_map>
#include <string>
#include <cstdlib>
#include <cstring>
using namespace std; #define MAX_AMOUNT 1010
const int INF = 0x7f7f7f7f;
#define CLR(a,b) memset(a,b,sizeof(a))
int callInfo[MAX_AMOUNT][MAX_AMOUNT];
int fatherId[MAX_AMOUNT+];
int K, N, M;
vector<int> susPeopleVec;
vector<int> phoneNumCnt[MAX_AMOUNT];
unordered_map<int, int> susPeopleMap;
int getFather(int u)
{
int tmpNum = u;
while(fatherId[tmpNum] != tmpNum)
tmpNum = fatherId[tmpNum];
int tmpFa = tmpNum;
tmpNum = u;
while(fatherId[tmpNum] != tmpNum)
{
u = tmpNum;
tmpNum = fatherId[tmpNum];
fatherId[u] = tmpFa;
}
return tmpFa;
}
int main()
{
int tmpNum, tmpSt, tmpEnd, tmpTime, susCnt = ;
cin >> K >> N >> M;
CLR(callInfo, );
while(M--)
{
cin >> tmpSt >> tmpEnd >> tmpTime;
callInfo[tmpSt][tmpEnd] += tmpTime;
}
for(int i = ; i <= N; ++ i)
{
int shortCallCnt = ;
int rebackCnt = ;
for(int j = ; j <= N; ++ j)
{
if(callInfo[i][j] > && callInfo[i][j] <= )
{
shortCallCnt ++;
if(callInfo[j][i] > )
rebackCnt ++;
}
}
if(shortCallCnt > K && 1.0*rebackCnt/shortCallCnt <= 0.2)
{
susPeopleMap[i] = ;susCnt++;susPeopleVec.push_back(i);
}
}
for(int i = ; i <= N; ++ i)
{
fatherId[i] = i;
}
int index;
for(int i = ; i < susPeopleVec.size(); ++ i)
{
index = susPeopleVec[i];
for(int j = ; j <= N; ++ j)
{
if(susPeopleMap[j] == )
continue;
if(callInfo[index][j] > && callInfo[j][index] > )
{
int tmpF1 = getFather(index);
int tmpF2 = getFather(j);
if(tmpF1 > tmpF2)
{
fatherId[tmpF1] = tmpF2;
getFather(index);
}
else
{
fatherId[tmpF2] = tmpF1;
getFather(j);
}
}
}
}
if(susPeopleVec.size() == )
{
cout << "None" << endl;
return ;
}
for(int i = ; i < susPeopleVec.size(); ++ i)
phoneNumCnt[fatherId[susPeopleVec[i]]].push_back(susPeopleVec[i]);
for(int i = ; i <= N; ++ i)
{
if(phoneNumCnt[i].size() > )
{
bool symbolFlag = false;
for(auto it = phoneNumCnt[i].begin(); it != phoneNumCnt[i].end(); ++ it)
{
symbolFlag ? printf(" ") : symbolFlag = true;
printf("%d", *it);
}
printf("\n");
}
}
return ;
}
7-4 Structure of a Binary Tree
这种判断是否正确的题目,一般选择比较适合查找的顺序存储结构。
首先根据题目给出的后序和先序顺序,在数组中将该二叉树建立出来。
之后便是提取题目给出的结论中的数字,这个自己写个函数就可以搞定。
最后便是利用string.find()的查找功能确定结论是哪一种,然后进行判断(因为是顺序存储,判断会相当简单)。
(代码有点啰嗦,赶时间哈)
#include <cstdio>
#include <iostream>
#include <cmath>
#include <algorithm>
#include <vector>
#include <unordered_map>
#include <string>
#include <cstdlib>
#include <cstring>
using namespace std; #define MAX_AMOUNT 1010
const int INF = 0x7f7f7f7f;
#define CLR(a,b) memset(a,b,sizeof(a))
int N, M;
bool fullFlag = true;
vector<int> postVec, inorderVec;
vector<int> treeVec();
unordered_map<int, int> nodeIndexMap;
bool createTree(int inL, int inR, int postL, int postR, int nodeIndex)
{
if(inL > inR || postL > postR)
return false;
int tmpNum = postVec[postR];
int index = inL;
while(inorderVec[index] != tmpNum)
index++;
treeVec[nodeIndex] = tmpNum;
nodeIndexMap[tmpNum] = nodeIndex;
int childCnt = ;
if(createTree(inL, index-, postL, postL+index--inL, nodeIndex*))
childCnt ++;
if(createTree(index+, inR, postR-inR+index, postR-, nodeIndex*+))
childCnt ++;
if(childCnt == )
fullFlag = false;
return true;
}
int getNumber(string tmpStr)
{
bool flag = false;
int index = ;
while(index < tmpStr.size())
{
if(isdigit(tmpStr[index]))
break;
index ++;
}
int endIndex = index;
while(endIndex < tmpStr.size())
{
if(!isdigit(tmpStr[endIndex]))
{
break;
}
endIndex++;
}
return atoi(tmpStr.substr(index, endIndex-index).c_str());
}
int main()
{
cin >> N;
int tmpNum;
postVec.resize(N);
inorderVec.resize(N);
for(int i = ; i < N; ++ i)
cin >> postVec[i];
for(int i = ; i < N; ++ i)
cin >> inorderVec[i]; createTree(, N-, , N-, );
cin >> M;
getchar();
string tmpStr;
while(M--)
{
getline(cin, tmpStr);
if(tmpStr[tmpStr.size()-] == 't')
{
getNumber(tmpStr) == treeVec[] ? printf("Yes\n") : printf("No\n");
}
else if(tmpStr[] == 'I')
{
fullFlag ? printf("Yes\n") : printf("No\n");
}
else if(tmpStr[tmpStr.size()-] == 's')
{
int tmpNum1 = getNumber(tmpStr.substr(,));
int tmpNum2 = getNumber(tmpStr.substr(,));
tmpNum1 = nodeIndexMap[tmpNum1];
tmpNum2 = nodeIndexMap[tmpNum2];
if((tmpNum1%== && tmpNum2-tmpNum1==)||tmpNum1%== && tmpNum1-tmpNum2==)
{
printf("Yes\n");
}
else
printf("No\n");
}
else if(tmpStr[tmpStr.size()-] == 'l')
{
int tmpNum1 = getNumber(tmpStr.substr(,));
int tmpNum2 = getNumber(tmpStr.substr(,));
tmpNum1 = nodeIndexMap[tmpNum1];
tmpNum2 = nodeIndexMap[tmpNum2];
int cnt = ;
while(tmpNum1 > )
{
tmpNum1 /= ;
cnt++;
}
while(tmpNum2 > )
{
tmpNum2 /= ;
cnt --;
}
if(cnt == )
printf("Yes\n");
else
printf("No\n");
}
else
{
int tmpNum1 = getNumber(tmpStr.substr(,));
int tmpNum2 = getNumber(tmpStr.substr(tmpStr.size()-,));
tmpNum1 = nodeIndexMap[tmpNum1];
tmpNum2 = nodeIndexMap[tmpNum2];
if(tmpStr.find("left")!=tmpStr.npos)
{
tmpNum1 == tmpNum2* ? printf("Yes\n") :printf("No\n");
}
else if(tmpStr.find("right")!=tmpStr.npos)
{
tmpNum1 == tmpNum2*+ ? printf("Yes\n") :printf("No\n");
}
else
{
tmpNum1 == tmpNum2/ ? printf("Yes\n") :printf("No\n");
}
}
}
return ;
}
PAT 2019 春的更多相关文章
- 2019春《C语言程序设计》课程设计的安排
课程设计的安排 课前准备: 要求同学们注册码云,并登陆: 要求组长加入由老师创建的一级组织:"2019春C语言": 要求组长建立二级组织,给自己的小组取个好听的名字,并邀请本组成员 ...
- 2019春第九周作业Compile Summarize
这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 这里 我在这个课程的目标是 能更加进一步的够熟练掌握指针的用法 这个作业在那个具体方面帮助我实现目标 能解更多的题 参考文献与网址 C语言 ...
- 2019春招——Vivo大数据开发工程师面经
Vvio总共就一轮技术面+一轮HR面,技术面总体而言,比较宽泛,比较看中基础,面试的全程没有涉及简历上的东西(都准备好跟他扯项目了,感觉是抽取的题库...)具体内容如下: 1.熟悉Hadoop哪些组件 ...
- PAT 2019 秋
考试的还行.不过略微有点遗憾,但是没想到第一题会直接上排序和dfs,感觉这次的题目难度好像是倒着的一样.哈哈哈哈. 第一题实在是搞崩心态,这道题给我的感觉是,可以做,但事实上总是差点啥. 第二题,第三 ...
- PAT 2018 春
A 1140 Look-and-say Sequence 简单模拟.可能要注意字符串第一个字符和最后一个字符的处理. #include <cstdio> #include <iost ...
- 京东2019春招Java工程师编程题题解
生成回文串 题目描述 对于一个字符串,从前开始读和从后开始读是一样的,我们就称这个字符串是回文串. 例如"ABCBA","AA","A"是回 ...
- Python题集:2019春Python程序设计选修课习题笔记
一.判断题: 1-1.在Python 3.x中可以使用中文作为变量名. 答案:√ 1-2.Python变量使用前必须先声明,并且一旦声明就不能再当前作用域内改变其类型. 答案:× 1-3.Python ...
- 2019春招面试高频题(Java版),持续更新(答案来自互联网)
第一模块--并发与多线程 Java多线程方法: 实现Runnable接口, 继承thread类, 使用线程池 操作系统层面的进程与线程(对JAVA多线程和高并发有了解吗?) 计算机资源=存储资源+计算 ...
- 2019春第十周作业Compile Summarize
这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 在这里 我在这个课程的目标是 能够对C语言的编写更加得心应手 这个作业在那个具体方面帮助我实现目标 结构体更进一步 参考文献与网址 C语言 ...
随机推荐
- Golang函数-递归函数
Golang函数-递归函数 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- day08-Python运维开发基础(文件操作与相关函数、函数基础)
1. 文件操作及相关函数 # ### 文件操作 """ fp = open("文件名称",mode=模式,encoding=编码集) fp 文件io对 ...
- 【转置】使用mysql转置表格行和列
1.原始表 2.查询结果表 3.查询语句 1 SELECT 2 year1, 3 SUM( CASE WHEN mon= 1 THEN account END ) AS m1, 4 SUM( CASE ...
- STM32CubeIDE 编译C/C++程序
文章转自 https://www.cnblogs.com/skyofbitbit/p/3708216.html STM32CubeIDE 其实就是STM32CubeMx + eclipse 首先,W ...
- 从三星官方uboot开始移植
移植前的准备 下载 android_uboot_smdkv210.tar.bz2 这个文件 开始移植 本人使用的开发板是九鼎的 x210,在三星 uboot 的主 Makefile 中找到了类似的 s ...
- Django(十三)状态保持 —— cookie与session+ajax异步请求+session记住登录状态+cookie记住登录名密码
一.状态保持的概述 http协议是无状态的.下一次去访问一个页面时并不知道上一次对这个页面做了什么.因此引入了cookie.session两种方式来配合解决此问题. Duplicate entry:重 ...
- ACM-挑战题之排列生成
题目描述:挑战题之排列生成 一自然数N,设N为3,则关于N的字典序排列为123,132,213,231,312,321.对于一个自然数N(1<= N <= 9 ) , 你要做的便是生成它的 ...
- 51nod 1055:最长等差数列
1055 最长等差数列 基准时间限制:2 秒 空间限制:262144 KB 分值: 80 难度:5级算法题 收藏 取消关注 N个不同的正整数,找出由这些数组成的最长的等差数列. 例如:1 3 5 ...
- ROS大型工程学习(二) 怎么阅读大型工程
基本思路是由点到面,由浅到深. 1.首先从launch文件入手. 文件中会看到比如: <node ns="> <rosparam command="load&qu ...
- centos7安装配置supervisor守护进程
yum install Supervisor supervisord -c /etc/supervisord.conf 进入 cd /etc 目录 找到supervisord.conf 配置文件 和 ...