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语言 ...
随机推荐
- MQTT 协议学习:003-MQTT通信流程介绍
背景 有关博文:通信报文的构成 . 上一讲说到可变头与消息体要结合不同的报文类型才能够进行分析(实际上,官方的文档的介绍顺序就是这样的) 那么,我们就来具体看看有关的报文类型. 在此之前 我们捋一捋完 ...
- upload-labs-env文件上传漏洞 1-10关
Pass-01 首先先看源码: function checkFile() { ].value; if (file == null || file == "") { alert(&q ...
- Liveness 探测【转】
Liveness 探测让用户可以自定义判断容器是否健康的条件.如果探测失败,Kubernetes 就会重启容器. 还是举例说明,创建如下 Pod: 启动进程首先创建文件 /tmp/healthy,30 ...
- Codeforces 591 B:Rebranding
B. Rebranding time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
- 第1节 IMPALA:4、5、linux磁盘的挂载和上传压缩包并解压
第二步:开机之后进行磁盘挂载 分区,格式化,挂载新磁盘 磁盘挂载 df -lh fdisk -l 开始分区 fdisk /dev/sdb 这个命令执行后依次输 n p 1 回车 回车 w ...
- mysql提示 Lock wait timeout exceeded解决办法 事务锁死
查询 select concat('KILL ',id,';') from information_schema.processlist; 复制结果 新建sql脚本粘贴并执行
- java虚拟机开篇01
一直以来对java 基础设施都啥都不知道啊,感觉有时候挺费力,挺吃劲的. 一下是一些很好的参考资料: http://blog.csdn.net/bingduanlbd/article/details/ ...
- 关于dom树
当用户访问ip地址,比如 ==www. aa .com/bb/cc/dd.html== 正常情况下是访问一个叫aa.com的服务器里的bb文件夹里的cc文件夹里的dd.html这个文件(其实很多情况都 ...
- oracle通用帮助类
需要的dll( EntityFramework.6.0.0Oracle.ManagedDataAccess.12.1.2400System.Configuration.dllEmitMapper.1. ...
- imagenet下载及训练
imagenet 种子 迅雷打开验证集http://academictorrents.com/download/5d6d0df7ed81efd49ca99ea4737e0ae5e3a5f2e5.tor ...