PAT 甲级 2016年春季

2024-06-19 16:18
文章标签 pat 2016 甲级 春季

本文主要是介绍PAT 甲级 2016年春季,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 PAT 甲级 1108 Finding Average

#include <bits/stdc++.h>
using namespace std;
bool IsValid(string s,double &ans){int c1=0,c2=0,pos_p;for(size_t i=0;i<s.size();++i){if(s[i]=='-') ++c1;else if(s[i]=='.') {++c2; pos_p=i;}else if(s[i]<'0'||s[i]>'9') return false;}// 负号 if(c1!=0&&c1!=1) return false;if(c1&&s[0]!='-') return false;// 小数点 if(c2!=0&&c2!=1) return false;if(c2&&pos_p+3<s.size()) return false;double tmp=atof(s.c_str());if(tmp>1000||tmp<-1000) return false;ans=tmp;return true;
}
int main() {int n;cin>>n;double sum=0;int ctr=0;for(int i=0;i<n;++i){string tmp;cin>>tmp;double tmp_lf;if(IsValid(tmp,tmp_lf)){++ctr,sum+=tmp_lf;}else{printf("ERROR: %s is not a legal number\n",tmp.c_str());}}if(ctr==0) printf("The average of 0 numbers is Undefined");else if(ctr==1) printf("The average of 1 number is %.2lf",sum);else printf("The average of %d numbers is %.2lf",ctr,sum/ctr);
}

2 PAT 甲级 1109 Group Photo

#include <bits/stdc++.h>
using namespace std;
struct P{string name;int h;P(string _name,int _h):name(_name),h(_h){}
};
int main() {int n,k;cin>>n>>k;vector<P> p;for(int i=0;i<n;++i){string name;int h;cin>>name>>h;p.emplace_back(name,h);}sort(p.begin(),p.end(),[](P&a,P&b){if(a.h!=b.h) return a.h>b.h;return a.name<b.name;});int ctr=0;for(int i=0;i<k;++i){deque<string> q;bool is_right=true; int sz;if(i==0) sz=n-n/k*(k-1);else sz=n/k;for(int j=0;j<sz;++j){if(is_right) q.push_back(p[ctr++].name);else q.push_front(p[ctr++].name);is_right=!is_right;}for(int i=0;i<sz;++i){if(i!=0) cout<<" ";cout<<q.front();q.pop_front();}cout<<endl;}
}

3 PAT 甲级 1110 Complete Binary Tree

#include <bits/stdc++.h>
using namespace std;
int lchild[50],rchild[50];
bool have_p[50];
vector<int> layer;
void BFS(int root){queue<int> q;q.push(root);while(!q.empty()){int now=q.front();q.pop();layer.push_back(now);if(lchild[now]!=-1) q.push(lchild[now]);if(rchild[now]!=-1) q.push(rchild[now]);}
}
int main() {int n;cin>>n;for(int i=0;i<n;++i){string a,b;cin>>a>>b;if(a=="-") lchild[i]=-1;else lchild[i]=atoi(a.c_str());if(b=="-") rchild[i]=-1;else rchild[i]=atoi(b.c_str());if(lchild[i]!=-1) have_p[lchild[i]]=true;if(rchild[i]!=-1) have_p[rchild[i]]=true;}int root=0;for(int i=0;i<n;++i) if(!have_p[i]) root=i;BFS(root);bool is_complete=true,find_no_null=false;for(int i=n-1;i>=0;--i){if(find_no_null&&rchild[layer[i]]==-1) is_complete=false;if(rchild[layer[i]]!=-1) find_no_null=true;if(find_no_null&&(lchild[layer[i]]==-1)) is_complete=false;if(lchild[layer[i]]!=-1) find_no_null=true;}if(is_complete) cout<<"YES "<<layer.back();else cout<<"NO "<<root;
}

4 PAT 甲级 1111 Online Map

#include <bits/stdc++.h>
using namespace std;
const int MAXN=550;
const int INF=0x3f3f3f3f;
struct QNode{int v,c;QNode(int _v,int _c):v(_v),c(_c){}bool operator< (const QNode &r) const{return c>r.c;};
};
struct Edge{int to,cost;Edge(int _to,int _cost):to(_to),cost(_cost){}
};vector<Edge> g1[MAXN],g2[MAXN];
int gdata1[MAXN][MAXN],gdata2[MAXN][MAXN];int dis1[MAXN],dis2[MAXN];bool done[MAXN];
set<int> pre1[MAXN],pre2[MAXN];
void Dijkstra(int s,int mode){auto &dis=(mode==1?dis1:dis2);auto &g=(mode==1?g1:g2);auto &pre=(mode==1?pre1:pre2);memset(dis,INF,sizeof(dis));memset(done,false,sizeof(done));priority_queue<QNode> q;dis[s]=0;q.push(QNode(s,0));while(!q.empty()){int now=q.top().v;q.pop();if(done[now]) continue;done[now]=true;for(auto edge:g[now]){int to=edge.to,cost=edge.cost;if(!done[to]&&dis[to]>=dis[now]+cost){if(dis[to]!=dis[now]+cost) pre[to].clear();dis[to]=dis[now]+cost;//printf("Cost :%d\n",cost);q.emplace(to,dis[to]);pre[to].insert(now);}}}
}
vector<int> path1,path2,tmp;
int min_time=INF,min_ctr=INF;
void DFS1(int to,int time){if(pre1[to].size()==0){if(time<min_time){min_time=time;path1=tmp;}}for(auto from:pre1[to]){tmp.push_back(from);DFS1(from,time+gdata2[from][to]);tmp.pop_back();}
}
void DFS2(int to,int ctr){if(pre2[to].size()==0){if(ctr<min_ctr){min_ctr=ctr;path2=tmp;}}for(auto from:pre2[to]){tmp.push_back(from);DFS2(from,ctr+1);tmp.pop_back();}
}
int main() {int n,m;cin>>n>>m;for(int i=0;i<m;++i){int a,b,c,d,e;cin>>a>>b>>c>>d>>e;gdata1[a][b]=d,gdata2[a][b]=e;g1[a].emplace_back(b,d),g2[a].emplace_back(b,e);if(c==0){gdata1[b][a]=d,gdata2[b][a]=e;g1[b].emplace_back(a,d),g2[b].emplace_back(a,e);}}int s,t;cin>>s>>t;Dijkstra(s,1);    Dijkstra(s,2);DFS1(t,0);DFS2(t,1);reverse(path1.begin(),path1.end());reverse(path2.begin(),path2.end());if(path1!=path2){printf("Distance = %d: ",dis1[t]);for(size_t i=0;i<path1.size();++i){printf("%d -> ",path1[i]);}printf("%d\n",t);printf("Time = %d: ",dis2[t]);for(size_t i=0;i<path2.size();++i){printf("%d -> ",path2[i]);}printf("%d\n",t);}else{printf("Distance = %d; Time = %d: ",dis1[t],dis2[t]);for(size_t i=0;i<path1.size();++i){printf("%d -> ",path1[i]);}printf("%d\n",t);}
}

这篇关于PAT 甲级 2016年春季的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1075519

相关文章

实践课堂|2016成都站|报名开始啦!

Hi,QingCloud 的小伙伴们,欢迎参加史上最有营养的云知识讲堂。 QingCloud 实践课堂系列开始于 2014 年末,在深圳、上海、广州、成都、杭州、北京六个城市,QingCloud 的研发工程师们同近千名 CIO 、架构师、开发者、运维工程师……分享了 QingCloud 的技术理念、功能特性和使用技巧,还有来自人民网、融云、泰捷视频、杏树林、友好速搭、百姓网、冰点、顺丰速运、洋葱

PAT甲级-1044 Shopping in Mars

题目   题目大意 一串项链上有n个钻石,输入给出每个钻石的价格。用m元买一个连续的项链子串(子串长度可为1),如果不能恰好花掉m元,就要找到最小的大于m的子串,如果有重复就输出多个,按递增顺序输出子串的前端和后端索引。 原来的思路 取连续的子串使和恰等于m,没有恰等于就找最小的大于。可以将子串依次累加,使得每个位置都是起始位置到该位置的序列和,整个数组显递增顺序,就可以用右边减左边

PAT (Advanced Level) Practice——1011,1012

1011:  链接: 1011 World Cup Betting - PAT (Advanced Level) Practice (pintia.cn) 题意及解题思路: 简单来说就是给你3行数字,每一行都是按照W,T,L的顺序给出相应的赔率。我们需要找到每一行的W,T,L当中最大的一个数,累乘的结果再乘以0.65,按照例子写出表达式即可。 同时还需要记录每一次选择的是W,T还是L

2016/9/11--一周的工作总结

自从九月一号开始上班到现在,现在总结一下自己的问题: 第一个问题:自己没有认真的解决问题! 刚去的第二天,施工给我了一张图纸,让我对电路图进行分析,我刚开始查了一些资料,也看了看但是一直不会做,后边就放一边了也不管了,自己一直说实习学不到东西,但是真正的问题来的时候,是否全力以赴的解决问题?这个问题你真的尽全力去解决了吗?回答是:不,我没有。我还不如一个本科的学生,我一直在逃避,一直没有

日记 01/27/2016.

有机会再看看这个: https://www.zhihu.com/question/27578379 想拿高package,多去拿几个offer再来谈,特别是hot startup的package,往往拿来要挟大公司的HR很好用。 最近在学习Angular JS,自己一定要坚持下来。然后把前端的知识补上。 打算Aug的时候,然后把Princeton的算法课上了,重新充电,然后把

2016年末程序员应该知道的基本架构思想

http://www.toutiao.com/i6352598153379709442/?tt_from=mobile_qq&utm_campaign=client_share&app=news_article&utm_source=mobile_qq&iid=6176041275&utm_medium=toutiao_ios

高教社杯数模竞赛特辑论文篇-2016年C题:电池剩余放电时间预测(附MATLAB代码实现)

目录 摘要 一、 问题重述 1.1 已知铅酸电池的基本情况与要求 1.2 需要解决的问题 1.2.1 问题 1 需要解决以下三点: 1.2.2 需要解决以下三点: 1.2.3 问题3需要解决: 二、问题分析 2.1 问题1 2.2 问题 2 2.3 问题3 三、模型假设与约定 四、符号说明及名词定义 五、模型的建立与求解 5.1 问题一的分析与求解 5.2 问题二的分析与求解 5.3 问题三的分

蘑菇街2016研发工程师编程题--回文串

题目 给定一个字符串,问是否能通过添加一个字母将其变为回文串。 输入描述: 一行一个由小写字母构成的字符串,字符串长度小于等于10。 输出描述: 输出答案(YES\NO). 示例1 输入 coco 输出 YES 解法1 使用动态规划,先看一下回文串的性质,如果一个字符串为回文串,那么翻转这个字符串以后跟原来的子串相同如下: 根据题目如果加一个字符就能使字符串成为回文串

网易2016研发工程师编程题--完全解析

前言 之前做公司的真题,碰到动态规划,还有一些数学性质的题目比较多一点。网易2016研发工程师编程题跟之前做的题目有很大的不同,不仅涉及到二叉树的编码,还涉及到图的广度遍历,最后还有一个快排。可以说这次的三个题目含金量非常的高,因此做了一下总结和分析。 1.比较重量 题目描述:小明陪小红去看钻石,他们从一堆钻石中随机抽取两颗并比较她们的重量。这些钻石的重量各不相同。在他们们比较了一段时间

mysql 与java 转换格式化格林威治时间(Tue Sep 13 00:00:00 CST 2016)两种方式

1  mysql 中处理 SELECT STR_TO_DATE('Thu Jul 20 15:04:03  2017','%a %b %e %T %Y %Y %Y') from dual ;   STR_TO_DATE(REPLACE('Tue Sep 13 00:00:00 CST 2016', '00:00:00 CST ', '') ,'%a %b %e %Y %Y %Y') 2 ja