Coding Program
各种oj的题目代码
会做饭的好同学
遇多少风浪,心不再摇晃
展开
-
PAT(甲级)1012 The Best Rank(排序)
Description题目大意:给出n个人的成绩,m次询问,求这个人最好的成绩排名Inputn mn个人的信息,m次询问IDOutput每个人的最好排名和科目解题思路算法标签:纯粹的排序,按照题意即可代码// TSWorld#include <iostream>#include <cstdlib>#include <cstdio>#include <cstring>#include <algorithm>using原创 2020-10-23 21:07:35 · 61 阅读 · 0 评论 -
PAT(甲级)1106 Lowest Price in Supply Chain(树的遍历)
Description题目大意:一个供应链有零售商,经营商和供应商,只有零售商和顾客交易,供应商给出价格P,每次往下一层销售价格增长原来的r%倍,问顾客拿到的最低价格以及最低价格零售商的个数Inputn,P,rk,ki,代表每个节点与k个子节点Output最低价格price和零售商个数minnumber解题思路算法标签:树的遍历显然零售商就是叶子节点,我们所找的便是深度最小的叶子节点,以及其个数,最后根据层数算出price,index代表树节点的标号,depth代表搜索树此时的深度,min原创 2020-10-04 16:19:48 · 90 阅读 · 0 评论 -
PAT(甲级)1111 Online Map(最短路)
Description题目大意:给定一个图,要求你找到最短路和最快的路Inputn代表n个点,m代表m条边接下来m行,每行分别输入V1,V2,oneway,length,time如果oneway=1代表V1,V2是单向的,否则则是双向的,length代表V1到V2的长度,time代表V1到V2的时间最后一行 source和destination代表起点和终点Output如果最短路有多条,求其中最快的;如果最快路有多条,求经过节点最少的;如果最快路和最短路相同,则一起输出,反之则分别输出出来原创 2020-10-11 15:32:19 · 130 阅读 · 0 评论 -
PAT(甲级)1114 Family Property(并查集)
Description题目大意:给出每个家庭的成员组成,以及写着他们名字的房产,要求找到家庭成员的数量、平均房产面积以及平均套数Input第一行n,接下来n行为:ID Father Mother k childi(i<=k) Mestate Area表示第i个人自己的ID 父亲的ID,母亲的ID,孩子的数量,以及每个孩子的ID,第i个人有的房产套数,以及面积Output输出家庭的个数,以及每个家庭ID最小的人,家庭成员总数,平均房产套数,平均面积,按照平均面积由大到小排列,如果相同,按照原创 2020-07-20 20:54:23 · 171 阅读 · 0 评论 -
PAT(甲级)1148 Werewolf - Simple Version(枚举)
Description狼人杀游戏,第几个人说第几个人是狼人或者是人,规定所有人中有两个狼人,其中只有一个狼人和一个人说谎,要求找出两个狼人Input第一行n,代表n个人接下来n行正数 Di 代表:第i个人说第Di人是human负数 Di 代表:第i个人说第Di(绝对值)人是werewolfOutput输出两个werewolf的下标,一个空格,如果有多个答案,输出最小的序列解题思路算法标签:枚举显然就是枚举任意两个人是狼人,统计n个人说谎的人数,如果说话人数为两人,且一个为狼人另一个为人原创 2020-07-25 20:34:06 · 309 阅读 · 2 评论 -
PAT(甲级)1050 String Subtraction(字符串)
Description题目大意:有两个字符串S1,S2,要求出从S1中移出S2中有的字符InputS1 S2OutputS1-S2解题思路算法标签:(实在想不出什么算法)标记S2中出现的字符,充分利用ASCII的数值转换,遍历S1,如果S1[i]已经被isused标记,则不输出,否则输出代码//TSWorld#include <iostream>#include <cstdio>#include <cstdlib>#include <al原创 2020-10-09 11:59:43 · 124 阅读 · 0 评论 -
PAT(甲级)1023 Have Fun with Numbers (高精度)
Description题目大意:一个长度没有超过20的数字乘以2后,是否与原来的数字构成相同Input长度不超过20的数字OutputYes或No乘以2的数字解题思路算法标签:显然已经超过long long的范围,所以用number数组模拟乘法运算,最后与原来的数字判断一下即可代码// TSWorld#include <iostream>#include <cstdlib>#include <cstdio>#include <cstrin原创 2020-10-24 19:42:16 · 165 阅读 · 0 评论 -
PAT(甲级)1103 Integer Factorization(DFS)
Description:题目大意:给出N,K,P,求将N分成K个正整数的P次方之和,使之系数之和最大,如果答案不唯一,输出字典序最大的解题思路:算法标签:DFS倒着搜索,搜索到的答案显然就是字典序最大的,用vector方便一点代码:// TSWorld#include <iostream>#include <cstdlib>#include <cstdio>#include <cstring>#include <algorithm&原创 2020-11-09 20:06:47 · 82 阅读 · 0 评论 -
PAT(甲级)1048 Find Coins(散列表)
Description题目大意:Eval喜欢收集coin,现在买东西需要支付两个硬币,希望你能帮她找到哪两个硬币Inputn代表coin数量m代表购买的总价格接下来n个数代表每个硬币的价值Output输出两个硬币的数值,如果不唯一,输出第一个较小的那个,如果没有答案,输出No Solution解题思路算法标签:模拟简单做个映射numbers[number]代表number的数量,显然题目中可能存在多个价值相同的硬币,所以要考虑价值为i和m-i是否相同,相同的话数量是否大于1,显然这道题关原创 2020-10-08 23:18:26 · 111 阅读 · 0 评论 -
PAT(甲级)1025 PAT Ranking(排序)
Description:题目大意:PAT 有多个考场,将每个考场的排名合并成一个最终的排名。解题思路:算法标签:排序按照题目所述,该怎么排名就怎么排名。代码:// TSWorld#include <iostream>#include <cstdlib>#include <cstring>#include <cstdio>#include <cstring>#include <vector>#include &l原创 2020-12-05 20:10:07 · 137 阅读 · 0 评论 -
PAT(甲级)1115 Counting Nodes in a BST(二叉搜索树遍历)
Description题目大意:构建二叉搜索树:比左子节点大,比右子节点小,找到倒数第一层节点总数和倒数第二层节点总数Inputn,接下来n个节点的数值Output输出最后一层和倒数第二层节点的个数,以及它们的和解题思路算法标签:二叉搜索树的遍历构建二叉搜索树,levels统计该层节点的个数,maxdepth-1是该二叉搜索树的深度(之所以-1研究dfs函数去吧)代码//TSWorld#include <iostream>#include <cstdio>#原创 2020-10-04 17:28:49 · 96 阅读 · 0 评论 -
PAT(甲级)1077 Kuchiguse(字符串)
Description:题目大意:给出 n 个字符串,求它们公共后缀字串。解题思路:算法标签:字符串先将每个字串翻转一下,因为操作方便,然后寻找公共部分,利用 substr()截取公共后缀。代码:// TSWorld#include <iostream>#include <cstdlib>#include <cstring>#include <cstdio>#include <cstring>#include <vec原创 2020-12-11 15:19:01 · 89 阅读 · 0 评论 -
PAT(甲级)1028 List Sorting(排序)
Description:题目大意:给出 n 个学生的ID,name,grade。C = 1,按照 ID 升序排序。C = 2,按照 name 升序排序,如果名字相同,按照 ID 升序排序。C = 3,按照 grade 升序排序,如果 grade 相同,按照 ID 升序排序。 解题思路:算法标签:排序代码:// TSWorld#include <iostream>#include <cstdlib>#include <cstring>#inclu原创 2020-12-15 12:14:36 · 98 阅读 · 0 评论 -
PAT(甲级)1041 Be Unique(模拟)
Description:题目大意:找出第一个唯一的数字,没有就输出None解题思路:算法标签:模拟统计一下每个数字出现的个数,然后从头遍历,第一个出现次数为 1 的数字就是答案。代码:// TSWorld#include <iostream>#include <cstdlib>#include <cstring>#include <cstdio>#include <cstring>#include <vector>原创 2020-12-04 20:41:00 · 111 阅读 · 0 评论 -
PAT(甲级)1019 General Palindromic Number(模拟)
Description题目大意:多项式求系数,判断系数是不是Palindromic NumberInputN b(看题意)OutputYes或No输出系数解题思路算法标签:模拟,先求出系数,然后判断是不是Palindromic Number代码// TSWorld#include <iostream>#include <cstdlib>#include <cstdio>#include <cstring>using namesp原创 2020-10-23 19:51:38 · 93 阅读 · 0 评论 -
PAT(甲级)1035 Password(模拟)
Description:题目大意:把 password 中的 ‘1’ 换成 ‘@’,把 ‘0’ 换成 ‘%’,把 ’O‘ 换成 ’o‘,把 ’l‘ 换成 ’L‘。解题思路:算法标签:模拟如题所述。代码:// TSWorld#include <cstdlib>#include <cstring>#include <cstdio>#include <cstring>#include <vector>using namespace原创 2020-12-04 21:15:04 · 115 阅读 · 0 评论 -
PAT(甲级)1027 Colors in Mars(进制转换)
Description:题目大意:给定三个十进制数字,转换成十三进制数字,前面输出’#’。解题思路:算法标签:模拟注意两位数的十三进制最大值为 CC = 12 ×\times× 13 + 12 = 168,因为十进制数字不会超过 168,所以直接计算即可。代码:// TSWorld#include <iostream>#include <cstdlib>#include <cstring>#include <cstdio>using na原创 2020-12-06 12:34:16 · 79 阅读 · 2 评论 -
PAT(甲级)1051 Pop Sequence(栈)
Description:题目大意:给定一个序列,判断是否是出栈顺序。解题思路:算法标签:模拟,栈按照栈的原理,模拟队列是否相等,从而得到结果代码:// TSWorld#include <iostream>#include <cstdlib>#include <cstring>#include <cstdio>#include <cstring>#include <vector>#include <algo原创 2020-12-07 19:51:34 · 59 阅读 · 0 评论 -
PAT(甲级)1084 Broken Keyboard(字符串)
Description题目大意:有一个坏的键盘,按键掉了,要求给出一个原始字符串和实际输出的字符串,找出哪些按键掉了,一个按键只输出一次InputS1原始数据S2实际输出的数据Output缺失的按键字符解题思路算法标签:字符串利用ascii码,用isused标记S2中的字符,isprintf判断这个字符是否输出过,遍历S1,如果未在isused出现,则说明该按键缺失,若没有输出过,则输出该字符代码// TSWorld#include <iostream>#include原创 2020-10-09 12:53:27 · 132 阅读 · 0 评论 -
PAT(甲级)1057 Stack(树状数组)
Description题目大意:在Stack的原有功能上增加了PeekMedian功能,即排好序后求中位数InputPush keyPopPeekMedianOutput相应操作的值解题思路算法标签:树状数组首先分析为什么用树状数组。显然对于pop和push两种操作无需考虑,在求中位数时候,为了得到中位数,显然需要排序好的序列才能得到,如果每次都得排序,显然时间复杂度会很高,如果是快排的话(O(nlgn)),最坏情况可能为(O(n2lgn))。所以关键问题在于查询。假设tree[n]记录原创 2020-11-01 15:46:10 · 175 阅读 · 0 评论 -
PAT(甲级)1107 Social Clusters(并查集)
Description题目大意:寻找相同爱好的朋友圈Input一个正整数N,代表N个人接下来N行:Ki hi[1]…hi[n]代表第i个人有k个爱好,爱好下标分别是hi[j] (1<=j<=k)Output第一行输出有多少个朋友圈第二行按照从大到小输出每个朋友圈人数(注意空格)解题思路算法标签:并查集将具有同一爱好的人合并,如果subsets[i].num为0,说明此时爱好I目前还没有人,那么初始化为这个第一个具有此爱好的人,然后与有这个同样爱好的人最后用count_roo原创 2020-07-20 22:06:08 · 115 阅读 · 0 评论 -
PAT(甲级)1092 To Buy or Not to Buy(字符串)
Description题目大意:给定两个字符串,s1和s2,如果s2中存在的字符在s1中均能找到,且s1中对应的字符个数大于等于s2中对应的字符个数,那么输出Yes,并且输出多余的字符个数,反之输出No,并且输出缺几个字符/font>Inputs1,s2OutputYes 多余的字符个数或者No 缺少几个字符解题思路算法标签:字符串numbers统计每个字符的个数,遍历s2中每个字符,如果该字符的个数大于0,则numbers-1,如果numbers小于等于0,那说明不满足结果,统计原创 2020-10-09 18:57:21 · 67 阅读 · 0 评论 -
PAT(甲级)1099 Build A Binary Search Tree(构建二叉搜索树)
Description题目大意:给出一个n个节点的二叉搜索树(0~n-1)以及其数值,只有一种方式填入其数值,要求构建二叉搜索树,并且层序遍历输出Inputn个节点,接下来n行代表第i个节点的左子树节点和右子树节点下标,-1代表NULL,最后一行n个数值代表n个节点的数值Output该二叉搜索树的层序遍历解题思路算法标签:构建二叉搜索树已知二叉搜索树的中序遍历是从小到大排序,所以可以先把n个数从小到大排序,按照已知二叉搜索树中序遍历将其key值确定,最后按照层序遍历输出代码//TSWo原创 2020-10-05 20:15:25 · 142 阅读 · 0 评论 -
CSP认证 202009-2 风险人群筛查(模拟)
Description:想要找出经过高危区域的居民,分析位置记录是一种简单有效的方法。具体来说,一位居民的位置记录包含 t 个平面坐标 (x1,y1),(x2,y2),⋯\cdots⋯,(xt,yt)。其中 (xi,yi) 表示该居民 i 时刻所在位置。高危区域则可以抽象为一个矩形区域(含边界),左下角和右上角的坐标分别为 (xl,yd) 和 (xr,yu),满足 xl < xr且 yd < yu 。考虑某位居民的位置记录,如果其中某个坐标位于矩形内(含边界),则说明该居民经过高危区域;原创 2020-11-27 18:37:53 · 282 阅读 · 0 评论 -
CSP认证 201912-1 报数(模拟)
解题思路:算法标签:模拟代码:// TSWorld#include <iostream>#include <cstdlib>#include <cstdio>#include <cstring>#include <vector>using namespace std;const int N = 50;bool iscount(int number) { if(number % 7 == 0) return false;原创 2020-11-30 19:36:48 · 118 阅读 · 0 评论 -
CSP认证 202006-2 稀疏向量(模拟)
解题思路:算法标签:模拟纯粹模拟一下代码:// TSWorld#include <iostream>#include <cstdlib>#include <cstdio>#include <cstring>#include <vector>using namespace std;const int N = 500005;struct Node { int index; int value;}u[N],v[N];原创 2020-11-29 21:12:47 · 90 阅读 · 0 评论 -
UVA 10305 Oil Ordering Tasks(拓扑排序)
Description:题目大意:John 有 n 个任务要做。任务不是独立的,一个任务只能另一个任务完成情况下执行。有 n 个任务,m 个 任务关系,求完成任务的顺序。解题思路:算法标签:拓扑排序创建一个队列维护入度为0的节点集合,显然入度为0意味着目前已经没有需要在它之前完成的任务,所以打印该节点。每次打印的节点,与它邻接的节点入度减一,因为需要在它之前完成的任务已经完成了。最后注意末尾空格。代码:// TSWorld#include <iostream>#include &原创 2020-11-29 11:58:05 · 112 阅读 · 0 评论 -
POJ1011 Sticks(DFS)
Description:乔治拿来一组等长的木棒,将它们随机地裁断,使得每一节木棍的长度都不超过50个长度单位。然后他又想把这些木棍恢复到为裁截前的状态,但忘记了初始时有多少木棒以及木棒的初始长度。请你设计一个程序,帮助乔治计算木棒的可能最小长度。每一节木棍的长度都用大于零的整数表示。解题思路:算法标签:DFS,剪枝首先先找到木棒的取值范围,最小为木棍中最长的,最大为所有木棍总和。然后进行DFS。剪枝分别为:1.当所取木棒长度不能被木棍长度总和整除,自然无需搜索。2.如果所取木棒长度大于总和 s原创 2020-11-12 21:35:06 · 279 阅读 · 0 评论 -
POJ4128 单词序列(BFS)
Description:给出两个单词(开始单词和结束单词)以及一个词典。找出从开始单词转换到结束单词,所需要的最短转换序列。转换的规则如下:1、每次只能改变一个字母2、转换过程中出现的单词(除开始单词和结束单词)必须存在于词典中例如:开始单词为:hit结束单词为:cog词典为:[hot,dot,dog,lot,log,mot]那么一种可能的最短变换是: hit -> hot -> dot -> dog -> cog,所以返回的结果是序列的长度5;注意:1、如果不原创 2020-11-12 15:13:18 · 246 阅读 · 0 评论 -
POJ1190 生日蛋糕(DFS剪枝)
Description:7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体。设从下往上数第 i(1≤i≤M)i(1\leq i \leq M)i(1≤i≤M)层蛋糕是半径为 Ri , 高度为 Hi 的圆柱。当 i<Mi < Mi<M 时,要求 R i >R i+1 R~i~ > R~i+1~R i >R i+1 且 H i&nb原创 2020-11-11 20:22:40 · 225 阅读 · 0 评论 -
POJ1703 Find them,Catch them
Description题目大意:有两个帮派,龙帮派和蛇帮派,判断两个人a和b是不是同属于一个帮派Input第一行T表示有T组数据每组数据第一行为n和m,代表n个人,m次查询每次查询分别为A a b 意思是:查询a和b是否在一个集合D a b 意思是:a和b不在一个集合Output对于每个A查询,都输出三个答案,“In the same gang.”, “In different gangs.” and “Not sure yet.”解题思路记住一句话,敌人的敌人就是朋友,我们把每次D操原创 2020-07-21 12:35:15 · 173 阅读 · 0 评论 -
POJ1065最长不下降子序列&&Dilworth定理&&动态规划
Dilworth定理:对于一个偏序集,最少链划分等于最长反链长度。Dilworth定理的对偶定理:对于一个偏序集,其最少反链划分数等于其最长链的长度。即把一个数列划分成最少的最长不升子序列的数目就等于这个数列的最长上升子序列的长度。DescriptionThere is a pile of n wooden sticks. The length and weight of each sti...原创 2018-12-04 21:15:57 · 267 阅读 · 0 评论 -
POJ2833优先队列STL版
The AverageTime Limit: 6000msMemory Limit: 10000KB 64-bit integer IO format: %lld Java class name: MainSubmit StatusIn a speech contest, when a contestant finishes his speech, the judges will then ...原创 2018-12-01 11:18:26 · 197 阅读 · 0 评论 -
POJ2833(错误)
#include<cstdio>#include<iostream>#include<cstdlib>#include<cstring>using namespace std;float data[5000009];const int M_xx = 0x7fffffff;double heap1[20],heap2[20];int l...原创 2018-11-29 17:48:53 · 198 阅读 · 0 评论 -
洛谷P1908 逆序对(树状数组)
Description逆序对就是序列中ai > aj且 i < j 的有序对。Inputnn个整数Output逆序对数解题思路算法标签:树状数组朴素算法O(n2)便不赘述了。求逆序对个数,无需考虑具体数值的大小,只需考虑数值之间的大小关系,只需要知道一个数后面有多少个比它小的数的个数即可。所以可以把number映射成为[1,n],利用树状数组维护tree数组,然后倒序从n开始,Query(value)代表处理第i个数时,1-value有多少个数字,然后比valve小的个数就是Q原创 2020-11-02 16:32:33 · 293 阅读 · 0 评论 -
洛谷P3374(树状数组)
Description题目大意:如题,已知一个数列,你需要进行下面两种操作:1.将某一个数加上 x2.求出某区间每一个数的和Input第一行包含两个正整数 n,m,分别表示该数列数字的个数和操作的总个数。第二行包含 n 个用空格分隔的整数,其中第 i 个数字表示数列第i项的初始值。接下来 m 行每行包含 3 个整数,表示一个操作,具体如下:1 x k: 将第 x 个数加上 k2 x y: 输出区间 [x,y] 内每个数的和Output输出包含若干行整数,即为所有操作 2 的结果。解题原创 2020-11-02 14:34:41 · 105 阅读 · 0 评论 -
洛谷P1396营救
Description妈妈下班回家,街坊邻居说小明被一群陌生人强行押上了警车!妈妈丰富的经验告诉她小明被带到了t区,而自己在 s 区。该市有 m 条大道连接 n 个区,一条大道将两个区相连接,每个大道有一个拥挤度。小明的妈妈虽然很着急,但是不愿意拥挤的人潮冲乱了她优雅的步伐。所以请你帮她规划一条从 s 至 t 的路线,使得经过道路的拥挤度最大值最小。Input第一行有四个用空格隔开的 n,m,s,t,其含义见【题目描述】。接下来 m 行,每行三个整数 u,v,w表示有一条大道连接区 u 和区 v,原创 2020-07-19 18:44:47 · 215 阅读 · 0 评论 -
洛谷P4047(部落划分)
Description聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落之间则经常发生争斗。只是,这一切都成为谜团了——聪聪根本就不知道部落究竟是如何分布的。不过好消息是,聪聪得到了一份荒岛的地图。地图上标注了 n 个野人居住的地点(可以看作是平面上的坐标)。我们知道,同一个部落的野人总是生活在附近。我们把两个部落的距离,定义为部落中距离最近的那两个居住点的距离。聪聪还获得了一个有意义的信息——这些野人总共被分为了原创 2020-07-19 17:57:10 · 232 阅读 · 0 评论 -
洛谷P1991(最小生成树kruskal)
Description国防部计划用无线网络连接若干个边防哨所。2 种不同的通讯技术用来搭建无线网络;每个边防哨所都要配备无线电收发器;有一些哨所还可以增配卫星电话。任意两个配备了一条卫星电话线路的哨所(两边都ᤕ有卫星电话)均可以通话,无论他们相距多远。而只通过无线电收发器通话的哨所之间的距离不能超过 D,这是受收发器的功率限制。收发器的功率越高,通话距离 D 会更远,但同时价格也会更贵。收发器需要统一购买和安装,所以全部哨所只能选择安装一种型号的收发器。换句话说,每一对哨所之间的通话距离都是同一个 D。你原创 2020-07-19 17:46:18 · 172 阅读 · 0 评论 -
洛谷P1449后缀表达式
输入逆波兰表达式,输出结果#include&amp;amp;amp;lt;iostream&amp;amp;amp;gt;#include&amp;amp;amp;lt;cstdio&amp;amp;amp;gt;#include&amp;amp;amp;lt;cstdlib&amp;amp;amp;gt;#include&amp;amp;amp;lt;algorithm&原创 2018-12-26 20:34:21 · 326 阅读 · 1 评论