考试的还行。不过略微有点遗憾,但是没想到第一题会直接上排序和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. CC3200 飞行计划

    CC3200 飞行计划 2016-01-25 CC3200 资源 CC3200_JTAG调试 CC3200-Uniflash 烧写程序 Mosquitto搭建MQTT 服务器 [示例] CC3200_ ...

  2. python3.7的一些心得,不定期更新。

    学习的python3.7.2,最新目前是3.8.1 这里记一下主要的几点: pip 是python的模块管理器,姑且这么叫它.和nodejs的npm一样的功能 官网下载python安装包,默认就会按照 ...

  3. leetcode617 Merge Two Binary Trees

    """ Given two binary trees and imagine that when you put one of them to cover the oth ...

  4. SpringBoot-配置Java方式

    SpringBoot中使用Java方式配置步骤如下: 在类上加入@Configuration注解,代表作为配置类 在该类方法上加入@Bean注解,代表将方法返回的Bean加入Spring容器 在该类中 ...

  5. 安卓多个按钮使用一个OnClickListener

    安卓studio 3.1 版本编译通过 一个按钮id为bt1 一个按钮Id为bt2 mainactivity 代码入下 package com.example.vmpdump.firstapp; im ...

  6. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-home

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  7. P1011 A+B 和 C

    转跳点:

  8. 云时代架构阅读笔记七——Java多线程中如何使用synchronized关键字

    关于线程的同步,可以使用synchronized关键字,或者是使用JDK 5中提供的java.util.concurrent.lock包中的Lock对象.本文探讨synchronized关键字. sy ...

  9. Web安全测试学习笔记 - vulhub环境搭建

    Vulhub和DVWA一样,也是开源漏洞靶场,地址:https://github.com/vulhub/vulhub 环境搭建过程如下: 1. 下载和安装Ubuntu 16.04镜像,镜像地址:htt ...

  10. 144-PHP trim函数的使用

    <?php //定义多个字符串 $str1='whello12x'; $str2='3462hello'; $str3='xayABCaxy'; $str1=trim($str1,'a..z') ...