PAT 2019 秋
考试的还行。不过略微有点遗憾,但是没想到第一题会直接上排序和dfs,感觉这次的题目难度好像是倒着的一样。哈哈哈哈。
第一题实在是搞崩心态,这道题给我的感觉是,可以做,但事实上总是差点啥。
第二题,第三题,把我的心态稳住了,不然的话这次考试可能会雪崩。这两道题目都是提交一次,直接全红。
接着二三题带来的信心把第四题搞定了,好像提交了两次。
然后就又开始死磕第一题,关键是当时自己以为第一题不应该用dfs,就一直在修改细节。╮(╯▽╰)╭,还是超时。
感觉PAT不算很难,但是在新的环境、计时、排队提交等因素的影响下,对心理素质有相当大的考验(至少对不少人来说),第一题可能直接就导致整场考试稳不住了。
无论如何实力足够强可以减少这些因素的影响。
下面是考试时候的代码。
7-1 Forever
当时觉得第一题,3000ms, 直接暴力计算了。(最后一个点超时)只需要把第二个for循环改成
#include <cstdio>
#include <vector>
#include <cmath>
#include <iostream>
#include <map>
#include <algorithm>
using namespace std;
int N, K, m;
typedef struct NODE{
int a, n;
NODE(int tmpN, int tmpA):a(tmpA),n(tmpN){}
}node;
int gcd(int a, int b){
if(b == ) return a;
return gcd(b, a%b);
}
bool isPrimeB2(int n){
if(n <= )
return false;
int sqr = (int)sqrt(1.0*n);
for(int i = ; i <= sqr; ++ i)
if(n % i == )
return false;
return true;
}
int getSumOfDigit(int n){
int tmpSum = ;
while(n > ){
tmpSum += n %;
n /= ;
}
return tmpSum;
}
bool cmpSort(node a, node b){
if(a.n != b.n)
return a.n < b.n;
else if(a.a != b.a)
return a.a < b.a;
}
vector<node> dstVec[];
int fac[]={,,,,,,,,,,};
int main(){
cin >> N; int tmpN;
for(int i = ; i <= N; ++ i){
scanf("%d %d", &K, &m);
int cnt = ;
printf("Case %d\n", i);
for(int j = fac[K]; j < fac[K+]; j++){
if(getSumOfDigit(j) == m){
tmpN = getSumOfDigit(j+);
int tmpNum = gcd(m, tmpN);
if(isPrimeB2(tmpNum)){
cnt ++;
dstVec[tmpN].push_back(NODE(tmpN, j));
}
}
} if(cnt == )
printf("No Solution\n");
else{
for(int k = ; k < ; ++ k){
sort(dstVec[k].begin(), dstVec[k].end(), cmpSort);
for(auto it = dstVec[k].begin(); it != dstVec[k].end(); ++ it)
printf("%d %d\n", it->n, it->a);
dstVec[k].clear();
}
}
}
return ;
}
7-2 Merging Linked Lists
这道题目没啥好说的,甲级真题里面有类似的。
#include <cstdio>
#include <vector>
#include <cmath>
#include <iostream>
#include <map>
using namespace std;
int L1, L2, N;
typedef struct NODE{
int val, next, addr;
NODE(){}
NODE(int a, int v, int n):addr(a),val(v),next(n){}
}node;
vector<node> inputNodeVec();
vector<node> node1Vec, node2Vec, dstVec;
void adjust(vector<node> &lVec1, vector<node> &lVec2){
int len1 = , len2 = lVec2.size()-, cnt = ;
while(len1 < lVec1.size() && len2 >= ){
if(cnt < ){
dstVec.push_back(lVec1[len1++]);
cnt ++;
}
else{
dstVec.push_back(lVec2[len2--]);
cnt = ;
}
}
while(len1 < lVec1.size())
dstVec.push_back(lVec1[len1++]);
while(len2 >= )
dstVec.push_back(lVec2[len2--]);
}
int main()
{
cin >> L1 >> L2 >> N;
int tmpAddr, tmpNext, tmpVal;
while(N--){
scanf("%d %d %d", &tmpAddr, &tmpVal, &tmpNext);
inputNodeVec[tmpAddr].next = tmpNext;
inputNodeVec[tmpAddr].val = tmpVal;
inputNodeVec[tmpAddr].addr = tmpAddr;
}
int cnt1 = , cnt2 = ;
tmpAddr = L1;
while(tmpAddr != -){
node1Vec.push_back(inputNodeVec[tmpAddr]);
tmpAddr = inputNodeVec[tmpAddr].next;
}
tmpAddr = L2;
while(tmpAddr != -){
node2Vec.push_back(inputNodeVec[tmpAddr]);
tmpAddr = inputNodeVec[tmpAddr].next;
}
if(node1Vec.size() > node2Vec.size()){
adjust(node1Vec, node2Vec);
}
else{
adjust(node2Vec, node1Vec);
}
int tmpLen = dstVec.size();
for(int i = ; i < tmpLen; ++ i){
if(i == tmpLen-)
printf("%05d %d -1\n", dstVec[i].addr, dstVec[i].val);
else
printf("%05d %d %05d\n", dstVec[i].addr, dstVec[i].val, dstVec[i+].addr);
}
return ;
}
7-3 Postfix Expression
这一题也是基础题目。
#include <cstdio>
#include <vector>
#include <cmath>
#include <iostream>
#include <map>
#include <string>
#include <stack>
using namespace std;
int L1, L2, N;
typedef struct NODE{
string symbolStr;
int lChild, rChild;
NODE(){}
NODE(string str, int v, int n):symbolStr(str),lChild(v),rChild(n){}
}node;
vector<node> synTreeVec;
vector<bool> visitFlagVec;
string preStr;
string preOrder(int u){
if(u == -)
return "";
string tmpStr1 = preOrder(synTreeVec[u].lChild);
string tmpStr2 = preOrder(synTreeVec[u].rChild);
if(tmpStr1.empty())
return "(" + synTreeVec[u].symbolStr + tmpStr2 + ")";
else
return "(" + tmpStr1 + tmpStr2 + synTreeVec[u].symbolStr + ")";
}
bool isSyn(char tmpC){
if(tmpC == '+' || tmpC =='-' || tmpC=='*' || tmpC=='/' || tmpC =='%')
return true;
return false;
} int main(){
int N;
cin >> N;
synTreeVec.resize(N+);
visitFlagVec.resize(N+, false);
string tmpStr;
int tmpL, tmpR;
for(int i = ; i <= N; ++ i){
cin >> synTreeVec[i].symbolStr >> tmpL >> tmpR;
synTreeVec[i].lChild = tmpL;
synTreeVec[i].rChild = tmpR;
if(tmpL > )
visitFlagVec[tmpL] = true;
if(tmpR > )
visitFlagVec[tmpR] = true;
}
int tmpRoot = ;
for(int i = ; i <= N; ++ i){
if(!visitFlagVec[i]){
tmpRoot = i;
break;
}
}
preStr = preOrder(tmpRoot);
cout << preStr;
return ;
}
7-4 Dijkstra Sequence
这一题主要是最后的判断。把与源点最短路径相同的点当做同一等级、位置可以互换的点。
#include <cstdio>
#include <vector>
#include <cmath>
#include <iostream>
#include <map>
#include <string>
#include <stack>
using namespace std;
int Nv, Ne;
const int INF = 0x7f7f7f7f;
typedef struct NODE{
int val, next;
NODE(){}
NODE(int n, int v):val(v),next(n){}
}node;
vector<node> routeVec[];
vector<int> numSequen,disVec;
vector<int> sameLevelNode[];
map<int, int> disMap, visFlagMap;
bool dijkstra(int u){
fill(disVec.begin(), disVec.end(), INF);
vector<bool> dijVisFlagVec(Nv+,false);
disVec[u] = ;
for(int i = ; i < Nv; ++ i){
int tmpMin = INF, v = -;
for(int j = ; j <= Nv; j ++ ){
if(!dijVisFlagVec[j] && disVec[j] < tmpMin){
v = j;
tmpMin = disVec[j];
}
}
if(v == -)
break;
dijVisFlagVec[v] = true;
for(auto it = routeVec[v].begin(); it != routeVec[v].end(); ++ it){
int tmpV = it->next, tmpW = it->val;
if(!dijVisFlagVec[tmpV] && disVec[tmpV] > disVec[v] + tmpW)
disVec[tmpV] = disVec[v] + tmpW;
}
}
return true;
}
int main()
{
cin >> Nv >> Ne;
int tmpSt, tmpEnd, tmpDis;
while(Ne--){
scanf("%d %d %d", &tmpSt, &tmpEnd, &tmpDis);
routeVec[tmpSt].push_back(NODE(tmpEnd, tmpDis));
routeVec[tmpEnd].push_back(NODE(tmpSt, tmpDis));
}
int K;
disVec.resize(Nv+, INF);
cin >> K;
while(K--){
disMap.clear();
visFlagMap.clear();
numSequen.resize(Nv, );
for(int i = ; i < Nv; ++ i)
scanf("%d", &numSequen[i]);
bool tmpFlag = true;
dijkstra(numSequen[]);
for(auto i = ; i <= Nv; ++ i)
disMap[disVec[i]] ++;
int tmpIndex = , tmpMaxIndex = , tmpIndexDij = ;
for(auto it = disMap.begin(); it != disMap.end(); ++ it){
tmpMaxIndex += (it->second);
tmpDis = it->first;
int p = ;
while(p <= Nv && tmpIndexDij <= tmpMaxIndex){
if(disVec[p] == tmpDis){
visFlagMap[p] = ;
tmpIndexDij ++;
}
p++; }
while(tmpIndex < tmpMaxIndex){
int tmpNum = numSequen[tmpIndex++];
if(visFlagMap[tmpNum] != )
tmpFlag = false;
else
visFlagMap[tmpNum] = ;
}
}
if(tmpFlag)
printf("Yes\n");
else
printf("No\n");
}
return ;
}
PAT 2019 秋的更多相关文章
- 2019秋招Java面经(未完待续)
2019秋招Java面经(凭记忆回忆, 可能不准) 随着我们从大三升到大四...秋招也开始了. 秋招进行的还比较顺利, 刚开始没几天, 我的秋招就结束了. 到现在我玩了差不多十多天了, 总想着总结一下 ...
- C语言I—2019秋作业02
1.[新增内容] 这个作业属于那个课程 C语言程序设计 这个作业要求在哪里 <C语言I-2019秋作业02> 我在这个课程的目标是 这个作业在那个具体方面帮助我实现目标 <实现一些基 ...
- C语言I—2019秋作业03
这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 C语言I-2019秋作业03 我在这个课程的目标是 掌握if-else语句,运算关系 这个作业在那个具体方面帮助我实现目标 row 2 c ...
- 语言I—2019秋作业02
这个作业属于那个课程 这个作业要求在哪里 我在这个课程的目标是 这个作业在那个具体方面帮助我实现目标 参考文献 C语言程序设计I https://edu.cnblogs.com/campus/zswx ...
- [找工作] 2019秋招|从春招到秋招,Java岗经验总结(收获AT)
转自(有更多) https://blog.csdn.net/zj15527620802/article/month/2018/10 前言 找工作是一件辛酸而又难忘的历程.经历过焦虑.等待.希望,我们最 ...
- 广联达C++面经(一站式西安) - 2019秋招
9月7号通知在广联达西安面试,早上在高新面完中兴一面就赶忙坐地铁倒公交去面试了. 一面(大概30-40min) 刚去签了一个到,就带我去面试了,在一个小型会议室,面试我的是一个女面试官(第一次碰见女 ...
- 【面试总结】网易2019秋招一站式面试总结(等offer中……)
岗位:运维工程师(网易杭州) 面试时间:一天 上午十一点二十,准时开启面试,初面面试官是个看起来就像是主管的人,厚实的身体,中气浑厚的声音,整齐朴素的衬衫. 简要问题摘录如下:(后续补充答案内容) 1 ...
- C语言I—2019秋作业01
1您对软件工程专业或计算机科学与技术专业了解是什么? 工程专业将成为一个新的热门专业.软件工程专业以计算机科学与技术学科为基础,突出软件开发的工程性,使学生在掌握计算机科学与技术方面知识和技能的基础上 ...
- 中兴软开C++面经(一站式西安)- 2019秋招
大概是9.6发短信邀请面试,但是6号有三个面试+一个在线笔试,就打算先去平安产险,看中途能不能再面个云从,中兴后面再面.然而,平安等了差不多4个小时才面完,期间云从面试官打来电话,只能说抱歉.中兴本来 ...
随机推荐
- Tornado -- 7 - 查询结果
查询结果 查询结果总结: 条件查询 多表查询
- Python测试进阶——(5)Python程序监控指定进程的CPU和内存利用率
用Python写了个简单的监控进程的脚本monitor190620.py,记录进程的CPU利用率和内存利用率到文件pid.csv中,分析进程运行数据用图表展示. 脚本的工作原理是这样的:脚本读取配置文 ...
- Ubuntu安装Orcale
Linux_Ubuntu安装oracle总结 ---------转自 https://www.2cto.com/database/201305/215338.html 话说我花了一晚上才在ubuntu ...
- 最小生成树的两种方法(Kruskal算法和Prim算法)
关于图的几个概念定义: 连通图:在无向图中,若任意两个顶点vivi与vjvj都有路径相通,则称该无向图为连通图. 强连通图:在有向图中,若任意两个顶点vivi与vjvj都有路径相通,则称该有向图为强连 ...
- Java 类的属性
章节 Java 基础 Java 简介 Java 环境搭建 Java 基本语法 Java 注释 Java 变量 Java 数据类型 Java 字符串 Java 类型转换 Java 运算符 Java 字符 ...
- Mac 设置git的template
1.在home目录下修改.gitconfig(没有新建) 2. 在home下新建 .setCommitMsg 文件 3.然后将一下内容复制到文件中 # <类型>: (类型的值见下面描述) ...
- Linux 安装gcc g++
Linux版本: cat /proc/version Linux version 3.10.0-693.11.6.el7.x86_64 (mockbuild@x86-041.build.eng.bos ...
- 如何修改 Vmware vRealize Operations Manager Appliance root密码
开机后,按上下键,选择 中间那一项,在底部增加:init=/bin/bash 进入单用户模式后,输入命令:# passwd root #修改root密码,要输 ...
- WIN10打开资源管理器显示该文件没有与之关联的程序来执行该操作.请安装应用,请在“默认应用设置”..关联 —— 解决方案
win+R,输入regedit,分别在HKEY_CLASSES_ROOT\piffileHKEY_CLASSES_ROOT\InternetShortcutHKEY_CLASSES_ROOT\lnkf ...
- 微信小程序如何刷新当前界面
在微信小程序开发的过程中,在一个页面中对数据操作之后我们大多数时间都需要刷新一下当前界面以把操作之后的结果显示出来,但是如何在执行操作后进行本页面的刷新就成了一个问题很大但是很需要的操作.下面介绍一下 ...