zoukankan      html  css  js  c++  java
  • ZJU PAT (Advanced Level) Practise 解析

    PAT - 浙江大学计算机程序设计能力测试在线评判系统 

    浙大PAT (Advanced Level)题目地址:http://pat.zju.edu.cn/contests/pat-a-practise

    下面主要是大致的阶解题思路,代码记录在Github上,请戳这里

    1001.A+B Format

    简单的模拟题,主要是a+b以后对结果的格式化,注意下细节就可以了

    1002.A+B for Polynomials

    简单的模拟题,可以初始化a[0...1000]和b[0...1000]记录并相加,非0项就是答案

    1003.Emergency

    1.深搜+回溯,搜索所有可能结果,并保存最好的结果。

    2.Dijsktra算法,先找最短路径,最短路径基础上在保证救援队伍数量最多。

    1004.Counting Leaves

    根据题目输入构造tree的结构,并用map<string, node*> hash来快速检索输入的节点在树结构中的位置,当所有都建立好了,用队列来进行层次遍历,就可以找到每层的叶子结点数量

    1005.Spell It Right

    模拟题,预处理一个string[]存储'zero'到'nine',根据计算的结果按位输出string[]的内容

    1006.Sign In and Sign Out

    时间化成整数,按照HH:MM:SS = HH*60*60+MM*60+SS,偷懒的话直接按照开始时间从小到大排序输出第一个,再按照结束时间从大到小输出第一个。也可以遍历元素列表一遍,维护开始最小时间和结束的最大时间

    1007.Maximum Subsequence Sum

    很常见的最大子段和DP问题,dp[i]表示以第i个数结尾和最大,那么dp[i+1] = max{dp[i]+a[i+1], a[i+1]};可以优化只用一个临时变量tmp就可以完成。最后注意保存最大子段和出现的位置。

    1008.Elevator

    模拟题,每次比较下上一次和当前楼层高度,最后加上总的停留时间

    1009.Product of Polynomials

    这题和1002解题思路相同

    1010.Radix

    1.只考虑tag为1,如果tag为2,那么我们把N1和N2调换一下顺序

    2.对于N2来说,我们可以根据他出现的数值判断出它至少是多少进制的数

    3.对于一个数,如果它的进制越大,那么它表示的数越大,反之越小,那么进制的大小和他所表示的数是单调递增函数

    4.那么就可以使用二分N2的进制的方法来找答案

    5.中间结果可能很大,用long long来表示

    1011.World Cup Betting

    简单模拟题,看懂题意即可。

    1012.The Best Rank

    模拟题,我用了4个vector<>来记录A、C、M、E,有点冗余,四个记录的东西是一样的,当读入数据完成后,对他们分别按照A、C、M、E的要求排序.查询时候,遍历4个vector<>,就可以找到答案了。

    1013.Battle Over Cities

    题意是删去一个点,剩下的城市需要多少条边能把他们连起来。

    我们只需要删去这个点相关的所有路径,然后DFS一下,FloodFill,看现在的图有多少块组成,就可以知道需要多少条边连接他们了。

    1014. Waiting in Line (30)

    稍微麻烦一点的模拟题,模拟银行排队,先初始化各个窗口前排队队列,然后模拟工作开始,

    从开始时间到终止时间:

    1. 当前time,遍历所有窗口进行一次工作,窗口工作完的人,踢出去。

    2. 如果窗口空闲,调入下一个排队的,直到没窗口

    3. 补充所有窗口的排队人数,直到队列不足

    4. time++

    1015.Reversible Primes

    模拟题,判断一个数N在D进制下是质数并且它的reverse数也是质数。需要prime()判断质数和reverse()翻转函数即可。

    1016.Phone Bills

    稍微复杂的模拟题。先存储所有的通话记录,然后按记录的时间排序,遍历记录列表,按照名字去统计每个人的有效通话时间和价格记录。

    1017.Queueing at Bank

    模拟题。给定银行工作的顾客数量和窗口数量,给定每个顾客的到达时间和处理业务所需时间,计算顾客的平均等待时间。

    对所有顾客按照到来时间进行排序,然后用队列模拟银行处理业务的过程,最后的结果是总等待时间除以合法的受理的顾客,而不是所有的人数。

    这题和1014做法类似。

    1018.Public Bike Management

    深搜+回溯。

    参考例子:http://linest.iteye.com/blog/1423959

    1019.General Palindromin Number

    模拟题,判断一个数N在b进制下是否是回文数。

    1020.Tree Traversals

    给定一棵树的PostOrder和InOrder遍历结果,用它构造树,然后输出树的层次遍历结果。

     1 struct node
     2 {
     3     int val;
     4     node *left;
     5     node *right;
     6     node(const int &v);
     7 };
     8 
     9 void build(node * &r, int post[],int in[],int postLeft,int postRight, int inLeft, int inRight)
    10 {//构造以r为根的二叉树
    11     if(inLeft > inRight)
    12     {//二叉树无结点,空二叉树
    13         r = NULL;
    14     }
    15     else
    16     {
    17         r = new node(post[postRight]);
    18         int mid = inLeft;
    19         while(in[mid] != post[postRight])
    20         {//找出中序遍历中根的位置
    21             mid++;
    22         }
    23       
    24         build(r->left, post, in, postLeft, postLeft+(mid-1-inLeft), inLeft, mid-1);
    25         build(r->right, post, in, postLeft+mid-inLeft, postRight-1, mid+1, inRight);
    26     }
    27 }
    28 
    29 node *root;
    30 build(root, postOrder, inOrder, 0, n-1, 0, n-1);

    1021.Deepest Root

    用并查集判断树的个数判断是否是一棵树,如果是,BFS遍历树,记录距离,第一次BFS找到距离根最远的叶子节点,第2遍BFS找到距离最远的所有结点的集合。

    1022.Digital Library

    模拟题,字符串分割处理。

    1023.Have Fun with Numbers

    模拟,将给定的数乘以2,如果运算前和运算后得到的数字不计顺序是一样的,就输出yes否则no。

    1024.Palindromic Number

    模拟题,主要就是判断是否是回文和Reverse数字,我用的Java的BigInteger。与1015有点类似。

    1025.PAT Ranking

    模拟题,用algorithm的sort来做。

    1026.Table Tennis

    复杂一点的模拟题,思路同银行排队那两道题,理清关系就可以搞定了。

    1027.Color in Mars

    模拟题,进制转换。

    1028.List Sorting

    模拟题,与1025类似。

    1029.Median

    求两个数组的中位数是多少。中位数:一组数据中间位置的数,如果是偶数,取中间两个位置数的平均数。《算法导论》上记得好像也有讲的。

    http://blog.csdn.net/alexingcool/article/details/7932441

    1030.Travel Plan

    图论,用BFS+Priority_Queue.

    1031.Hello World for U

    模拟题。

    1032.Sharing

    找到一个链表公共结点的位置。1.每访问一个结点就对该节点做标记,然后访问第二个,如果元素访问过,就找到公共结点。2.考虑当前结点到初始结点的距离,两个链表用距离度量,如果两个链表长度相同的话,那么相交结点在两个链表上距离相同。

    1033.To Fill or Not to Fill

    思路是贪心。代码参考:http://blog.csdn.net/Hackbuteer1/article/details/7402127

    1034.Head of a Gang

    用DFS遍历。

    1035.Password

    简答模拟题。

    1036.Boys vs Girls

    简单模拟题

    1037.Magic Coupon

    读入Coupon和Product后,排序。然后分别按照从首尾两个方向遍历相加。

    1038.Recover the Smallest Number

    把一堆数组合在一起为最小。直接比较字符串就可以了,用cmp函数,注意一下0.

    1039.

  • 相关阅读:
    现代操作系统:原理与实现配套实验ChCorelab02
    损失函数:交叉熵
    什么是 AWS IoT Greengrass?
    softmax与sigmoid的关系&最大熵与极大似然估计的关系
    AWS IoT Greengrass:连接器入门
    损失函数:最小二乘法与极大似然估计法
    AWS IoT Greengrass:将密钥部署到核心
    奇异值分解(SVD)
    积性函数前缀和个人总结
    AWS IoT Greengrass:核心软件的 OTA 更新
  • 原文地址:https://www.cnblogs.com/tiny656/p/2856191.html
Copyright © 2011-2022 走看看