考试的还行。不过略微有点遗憾,但是没想到第一题会直接上排序和dfs,感觉这次的题目难度好像是倒着的一样。哈哈哈哈。

  第一题实在是搞崩心态,这道题给我的感觉是,可以做,但事实上总是差点啥。

  第二题,第三题,把我的心态稳住了,不然的话这次考试可能会雪崩。这两道题目都是提交一次,直接全红。

  接着二三题带来的信心把第四题搞定了,好像提交了两次。

  然后就又开始死磕第一题,关键是当时自己以为第一题不应该用dfs,就一直在修改细节。╮(╯▽╰)╭,还是超时。

  感觉PAT不算很难,但是在新的环境、计时、排队提交等因素的影响下,对心理素质有相当大的考验(至少对不少人来说),第一题可能直接就导致整场考试稳不住了。

  无论如何实力足够强可以减少这些因素的影响。

下面是考试时候的代码。

7-1 Forever

当时觉得第一题,3000ms, 直接暴力计算了。(最后一个点超时)只需要把第二个for循环改成

for(int j = fac[K]+9; j < fac[K+1]; j += 10)
 #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 秋的更多相关文章

  1. 2019秋招Java面经(未完待续)

    2019秋招Java面经(凭记忆回忆, 可能不准) 随着我们从大三升到大四...秋招也开始了. 秋招进行的还比较顺利, 刚开始没几天, 我的秋招就结束了. 到现在我玩了差不多十多天了, 总想着总结一下 ...

  2. C语言I—2019秋作业02

    1.[新增内容] 这个作业属于那个课程 C语言程序设计 这个作业要求在哪里 <C语言I-2019秋作业02> 我在这个课程的目标是 这个作业在那个具体方面帮助我实现目标 <实现一些基 ...

  3. C语言I—2019秋作业03

    这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 C语言I-2019秋作业03 我在这个课程的目标是 掌握if-else语句,运算关系 这个作业在那个具体方面帮助我实现目标 row 2 c ...

  4. 语言I—2019秋作业02

    这个作业属于那个课程 这个作业要求在哪里 我在这个课程的目标是 这个作业在那个具体方面帮助我实现目标 参考文献 C语言程序设计I https://edu.cnblogs.com/campus/zswx ...

  5. [找工作] 2019秋招|从春招到秋招,Java岗经验总结(收获AT)

    转自(有更多) https://blog.csdn.net/zj15527620802/article/month/2018/10 前言 找工作是一件辛酸而又难忘的历程.经历过焦虑.等待.希望,我们最 ...

  6. 广联达C++面经(一站式西安) - 2019秋招

    9月7号通知在广联达西安面试,早上在高新面完中兴一面就赶忙坐地铁倒公交去面试了.  一面(大概30-40min) 刚去签了一个到,就带我去面试了,在一个小型会议室,面试我的是一个女面试官(第一次碰见女 ...

  7. 【面试总结】网易2019秋招一站式面试总结(等offer中……)

    岗位:运维工程师(网易杭州) 面试时间:一天 上午十一点二十,准时开启面试,初面面试官是个看起来就像是主管的人,厚实的身体,中气浑厚的声音,整齐朴素的衬衫. 简要问题摘录如下:(后续补充答案内容) 1 ...

  8. C语言I—2019秋作业01

    1您对软件工程专业或计算机科学与技术专业了解是什么? 工程专业将成为一个新的热门专业.软件工程专业以计算机科学与技术学科为基础,突出软件开发的工程性,使学生在掌握计算机科学与技术方面知识和技能的基础上 ...

  9. 中兴软开C++面经(一站式西安)- 2019秋招

    大概是9.6发短信邀请面试,但是6号有三个面试+一个在线笔试,就打算先去平安产险,看中途能不能再面个云从,中兴后面再面.然而,平安等了差不多4个小时才面完,期间云从面试官打来电话,只能说抱歉.中兴本来 ...

随机推荐

  1. 使用six库将Python2的项目完全转移到python3

    SIX是用于python2与python3兼容的库. 它存在的目的是为了拥有无需修改即可在Python 2和Python 3上同时工作的代码.话虽这么说,但是这并不代表在Python 3中引用该库就可 ...

  2. firewalld学习--service

    service是firewalld中另外一个非常重要的概念.还是拿门卫的例子来解释. 在iptables的时代我们给门卫下达规则时需要告诉他“所有到22号楼的人全部予以放行”.“所有到80号楼的人全部 ...

  3. endnote的使用

    下载网址: https://support.clarivate.com/Endnote/s/article/EndNote-Installer-download?language=en_US 关联of ...

  4. 【LeetCode】字符串中的第一个唯一字符

    [问题]给定一个字符串,找到它的第一个不重复的字符,并返回它的索引.如果不存在,则返回 -1. s = "leetcode" 返回 . s = "loveleetcode ...

  5. Golang的基础数据类型-浮点型

    Golang的基础数据类型-浮点型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.浮点型概述 Go语言提供两种精度的浮点数,即float32和float64,其中float32 ...

  6. Golang的常量定义及使用案例

    Golang的常量定义及使用案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常量的定义 package main import ( "fmt" ) fu ...

  7. HihoCoder#1052:基因工程

    HihoCoder#1052:基因工程 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho正在进行一项基因工程实验.他们要修改一段长度为N的DNA序列,使得这段 ...

  8. 5款国内免费CDN服务商及使用点评

    第一款,百度加速乐 加速乐目前被百度收购,这样百度也有了自己运营的CDN产品,可以丰富自身站长平台工具使用用户群.目前有免费用户和付费用户的区别,对于一般的网站免费方案也足够使用.特点具备智能解析.加 ...

  9. IPsec_crypto[6]次配置

    IPsec_crypto[6]次配置: ①.①:crypto isakmp enbale——启用ISAKMP ②.②:crypto isakmp policy 10——创建一个策略组 ③:encryp ...

  10. STM32中ARM系列编译工具链的编译宏选择(__CC_ARM、__ICCARM__、__GNUC__、__TASKING__)

    一 前言 stm32 f103中.关系到一个选择何种编译宏的问题.这里就梳理一下吧. 二 正文 1  在 core_cm3.h 文件中,有如下代码: #if defined ( __CC_ARM ) ...