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个小时才面完,期间云从面试官打来电话,只能说抱歉.中兴本来 ...
随机推荐
- CC3200 飞行计划
CC3200 飞行计划 2016-01-25 CC3200 资源 CC3200_JTAG调试 CC3200-Uniflash 烧写程序 Mosquitto搭建MQTT 服务器 [示例] CC3200_ ...
- python3.7的一些心得,不定期更新。
学习的python3.7.2,最新目前是3.8.1 这里记一下主要的几点: pip 是python的模块管理器,姑且这么叫它.和nodejs的npm一样的功能 官网下载python安装包,默认就会按照 ...
- leetcode617 Merge Two Binary Trees
""" Given two binary trees and imagine that when you put one of them to cover the oth ...
- SpringBoot-配置Java方式
SpringBoot中使用Java方式配置步骤如下: 在类上加入@Configuration注解,代表作为配置类 在该类方法上加入@Bean注解,代表将方法返回的Bean加入Spring容器 在该类中 ...
- 安卓多个按钮使用一个OnClickListener
安卓studio 3.1 版本编译通过 一个按钮id为bt1 一个按钮Id为bt2 mainactivity 代码入下 package com.example.vmpdump.firstapp; im ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-home
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- P1011 A+B 和 C
转跳点:
- 云时代架构阅读笔记七——Java多线程中如何使用synchronized关键字
关于线程的同步,可以使用synchronized关键字,或者是使用JDK 5中提供的java.util.concurrent.lock包中的Lock对象.本文探讨synchronized关键字. sy ...
- Web安全测试学习笔记 - vulhub环境搭建
Vulhub和DVWA一样,也是开源漏洞靶场,地址:https://github.com/vulhub/vulhub 环境搭建过程如下: 1. 下载和安装Ubuntu 16.04镜像,镜像地址:htt ...
- 144-PHP trim函数的使用
<?php //定义多个字符串 $str1='whello12x'; $str2='3462hello'; $str3='xayABCaxy'; $str1=trim($str1,'a..z') ...