PAT
文章平均质量分 71
菩提树下小沙弥
不忘初心 方得始终
展开
-
PAT1002
1002. A+B for Polynomials (25)k个元素的多项式 输入i和Ai (Ai*Xi)按照多项式下标相加后输出 #include#include#includeusing namespace std;const int N=2002;double f[N],val;int main(){ int k,loc; for(ci原创 2014-01-26 21:22:18 · 622 阅读 · 0 评论 -
PAT 1018 Public Bike Management
1018. Public Bike Management (30)看到题目后感觉挺麻烦的,参考了别人的代码,找到了思路。首先是题目要求:最短路径,拿出最少,拿回最少解题思路:用dijkstra找到0到其他点的最短路径dis[k],在dfs的时候用来剪枝。到达sp时候处理tpath存下的最短路径,找到一路上最大需求数量need作为0点拿出的数量need+sp还有的数量ge原创 2014-02-01 12:08:59 · 541 阅读 · 0 评论 -
PAT 1030. Travel Plan (30) 图论
开始想复杂了,也可能是数据太水。回溯竟然能过。我的想法是先用dijkstra找到距离dis和花费cost的最优解dd[d]和cc[d]然后用于回溯剪枝优化#include#include#includeusing namespace std;#define inf 0x3f3f3f3fconst int N=505;int dis[N][N],cost[N][N];in原创 2014-02-21 22:34:52 · 618 阅读 · 0 评论 -
PAT 1029. Median (25)
1029. Median (25)开始没注意,sort超时。后来发现给定的是两个排序好的数组,O(N)能过了,注意别越界,听说网上还有O(logN)的算法#include#include#include#includeusing namespace std;const int N=1000005;typedef long long LL;LL a[N],b[N];in原创 2014-02-21 21:06:07 · 622 阅读 · 0 评论 -
PAT 1032. Sharing (25)
1032. Sharing (25)题意:找到公共后缀起始的地方。用map记录该路径是否被访问过,flag表示是否存在公共后缀。最后一个例子对时间卡的很紧,用cin 或 t[i].ch 可能就卡在那10ms了。#include#include#includeusing namespace std;const int N=100005;struct node{ int i原创 2014-02-22 23:47:43 · 559 阅读 · 0 评论 -
PAT 1021 Deepest Root (25)
先dfs一次找到最长的一端,作为根进行第二次dfs,找到所有最长的树。要考虑只有1个点的情况#include#include#include#includeusing namespace std;const int N=10010;int cnt=1,start[N],n,rt[N],dist[N],a[N];struct edge{ int v,next;}e[2*N原创 2014-02-12 14:04:22 · 687 阅读 · 0 评论 -
PAT 1022 Digital Library (30)
首先是数据结构,gets的行输入以及scanf会接收末尾空格strstr(str,substr)寻找str中是否有substr,没有返回null最后sort一下,控制格式为%07d即可#include#include#include#include#includeusing namespace std;const int N=10005;int cnt=0,n,原创 2014-02-12 15:48:33 · 678 阅读 · 0 评论 -
PAT 1033. To Fill or Not to Fill (25)
1033. To Fill or Not to Fill (25)开始用dp写,只过了2个,真心蛋疼。网上看了是贪心,我的思路是:当前在第i个位置,gas表示剩余汽油能走的距离找到下个能到达的比第i个更便宜的位置记为j,没有则是-11.如果找不到这样的j(即为-1),在i加满油,去下一站2.如果剩余gas能到j,则去j站3.如果加上c的gas刚好能到j,则去j站否则就是原创 2014-02-25 12:17:05 · 685 阅读 · 0 评论 -
PAT 1020 Tree Traversals (25)
根据postorder后序和inorder中序遍历,求level层次遍历后序可以得出根在集合的最后,再根据中序划分左右子树集合,递归建树建树后bfs输出层次遍历#include#include#includeusing namespace std;const int N=50;int last[N],mid[N],n,cnt=0,start[N];queue q;原创 2014-02-08 20:16:31 · 529 阅读 · 0 评论 -
PAT 1019 General Palindromic Number (20)
进制转换+判回文#include#includeusing namespace std;int a[200],cnt=0;void trans(int n,int b){ do{ a[cnt++]=n%b; n/=b; }while(n); bool goal=true; for(int i=0;i<cnt/2;i++) if(a[i]!=a[cnt-1-原创 2014-02-08 16:12:55 · 574 阅读 · 0 评论 -
1025. PAT Ranking (25)
排序#include#include#includeusing namespace std;const int N=30002;struct node{ char id[14]; int rank,loc,locrank,score;}p[N];int cmp(node a,node b){ if(a.score==b.score) return strcmp(a.i原创 2014-02-15 23:03:54 · 489 阅读 · 0 评论 -
1023. Have Fun with Numbers (20)
简单模拟题#include#includeint digits[21],num1[10],num2[10],cnt=0;char d[21];void getNum(int num[],int len){ for(int i=0;i<len;i++) num[digits[i]]++;}int main(){ scanf("%s",d); int len=strlen(d原创 2014-02-15 22:11:22 · 494 阅读 · 0 评论 -
1024. Palindromic Number (25)
模拟加法#include#includeconst int N=110;int num[N],tmp[N],k,len;char t[N];void func(){ for(int i=0;i<len;i++) t[i]=num[i]+num[len-1-i]; int up=0; for(int i=0;i<len;i++){ num[i]=t[i]+up; up原创 2014-02-15 22:32:27 · 429 阅读 · 0 评论 -
1026. Table Tennis (30)
1026. Table Tennis (30)网上代码很多,但感觉偏长。我的想法是维护了两个队列vp代表vip队列和pp代表普通队列,use[i]表示第i张桌子还需使用的时间。3个注意点别人都提过了:1.很多空桌,vip先选vip桌子2.顾客玩的时间不超过2小时3.时间四舍五入(只要+30s)#include#include#includeusing name原创 2014-02-16 23:44:55 · 569 阅读 · 0 评论 -
PAT 1017 Queueing at Bank
1017. Queueing at Bank (25)第一次是没按秒走,错了半天。第二次是顾客在17点前到,但17点前无法得到服务,应该得到服务。#include#include#includeusing namespace std;#define arrived (p[turn].hh*3600+p[turn].mm*60+p[turn].ss)const原创 2014-01-31 17:40:17 · 604 阅读 · 0 评论 -
PAT1011 World Cup Betting
1011. World Cup Betting (20)浮点型,4.1其实是4.0999999999999996。判断下小数点后面是否大于(0.5-inf)确定最后一位小数即可#include const double inf=1e-9;double a[5][5];char ch[5]={' ','W','T','L'};double max(doubl原创 2014-01-29 14:03:33 · 619 阅读 · 0 评论 -
PAT1012 The Best Rank
1012. The Best Rank (25)最好的排名和对应类别(A是平均成绩)A > C > M > E 没有排名“N/A”这道题并不难,就是麻烦了点。还有一点就是排名的顺序不是1,2,2,3 而是1,2,2,4#include #includeusing namespace std;const int N=2002;struct student{原创 2014-01-29 14:56:52 · 631 阅读 · 0 评论 -
PAT1001
1001. A+B Format (20)控制输出格式为每3位一个逗号#include#include#includeusing namespace std;int d[20];int main(){ int a,b; while(cin>>a>>b){ int c=a+b,cnt=0; if(c<0) {printf("-");c=-c;}原创 2014-01-26 20:40:58 · 679 阅读 · 0 评论 -
PAT1004
1004. Counting Leaves (30)英语不好,理解错了题意。学英语的重要性啊...其实就是找每层叶子节点的个数,深搜一遍就行了#include#include#includeusing namespace std;const int N=502;int start[N],cnt=0,ans[N];struct edge{ int v,n原创 2014-01-27 15:23:04 · 654 阅读 · 0 评论 -
PAT1008
1008. Elevator (20)简单的模拟题,模拟一下实际情况。#include#include#includeusing namespace std;const int up=6,down=4,stop=5;int main(){ int n,go; cin>>n; int now=0,sum=0; for(int i=0;i<n;i++){原创 2014-01-27 16:24:10 · 526 阅读 · 0 评论 -
PAT1010
1010. Radix (25)参考了别人的代码,由于进制太大,可能会超出long long 所以要一个compare。二分查找答案#include #include using namespace std; typedef long long LL; LL str2Num(char * str, LL radix){ LL rst原创 2014-01-28 19:23:07 · 525 阅读 · 0 评论 -
PAT1003
1003. Emergency (25)回溯法搜一遍得到答案,变量名千万别取重复了,找了半天错!#include#include#includeusing namespace std;const int N=502;int value[N],start[N],cnt=0,visit[N];struct edge{ int v,w,next;}e[N*N];v原创 2014-01-27 14:39:06 · 635 阅读 · 0 评论 -
PAT1005
1005. Spell It Right (20)递归先输出第一个数字#include#include#includeusing namespace std;char str[102];char num[11][20]={"zero","one","two","three","four","five","six","seven","eight","nine"};原创 2014-01-27 15:32:53 · 727 阅读 · 0 评论 -
PAT1009
1009. Product of Polynomials (25)为毛多项式相乘是i+j啊?#include#include#includeusing namespace std;const int N=1001;double a[N],b[N],c[2*N];int main(){ int k,index; double val; cin>>k; for(原创 2014-01-27 18:59:54 · 552 阅读 · 0 评论 -
PAT1006
1006. Sign In and Sign Out (25)找最值的下标,简单题#include#include#includeusing namespace std;struct people{ int in,out; char name[20];}p[1000];int main(){ int n,hh,mm,ss; cin>>n; for(in原创 2014-01-27 15:44:25 · 698 阅读 · 0 评论 -
PAT1007
1007. Maximum Subsequence Sum (25)基本的动态规划,当然空间复杂度可以优化的。写的时候忘记考虑n=1的情况#include#include#includeusing namespace std;const int N=10002;int a[N];int dp[N],loc[N];//在i的最大和int main(原创 2014-01-27 16:13:53 · 613 阅读 · 0 评论 -
PAT 1016 Phone Bills
1016. Phone Bills (25)预处理出dp,排序,模拟题关键是逻辑的处理。#include#include#includeusing namespace std;const int N=1002;int bill[25],n,t[N],cnt=0;int dp[32][25][61];//从月初开始打电话消耗的钱struct records{ char原创 2014-01-31 15:34:27 · 660 阅读 · 0 评论 -
PAT 1015 Reversible Primes
1015. Reversible Primes (20)注意1不是素数#includeusing namespace std;int reverse(int n,int d){ int rst=0; while(n){ rst*=d; rst+=n%d; n/=d; } return rst;}bool isprime(int n){ if(n原创 2014-01-31 12:59:49 · 511 阅读 · 0 评论 -
PAT 1014 Waiting in Line
1014. Waiting in Line (30)模拟题,用队列做比较简单#include#includeusing namespace std;#define sb line[l].front()const int N=1002,bt=8*60,et=17*60;int t[N],n,m,k,q,p,ans[N];queue line[22]; void原创 2014-01-30 16:32:03 · 739 阅读 · 0 评论 -
PAT 1013 Battle Over Cities
1013. Battle Over Cities (25)对于集合操作,我喜欢用并查集,代码简单,复杂度低。由于粗心出现了个段错误,就是数组越界了,城市有N个,路可能有N*N条。#includeconst int N=1002;int father[N],x[N*N],y[N*N],n,m;int find(int v){ if(father[v]!=v) f原创 2014-01-30 14:43:51 · 796 阅读 · 0 评论 -
PAT 1034. Head of a Gang (30)
感觉自己写复杂了#include#include#include#include#include#includeusing namespace std;const int N=2005;int n,K;map name;map::iterator iter;string name1,name2,user[N];int tm,p1,p2,cnt=1,val[N];原创 2014-03-02 11:25:31 · 746 阅读 · 0 评论