PAT算法训练
「已注销」
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
入门模拟—简单模拟—A 1042
#includeusing namespace std;int main(){ int k,seq[55],start[55],end[55]; char map[5] = {'S','H','C','D','J'}; cin >> k; for(int i=1;i54;i++) { cin >> seq[i];原创 2018-01-03 13:18:04 · 220 阅读 · 0 评论 -
算法初步—散列—A1048
思路: 运用散列的思想,记录不同面值的硬币数,再从1遍历寻找两个硬币即可注意: 当出现两个相同面值硬币的和恰好等于需要钱数的时候,要注意判断数量是否>=2,如7+7=14#include#include#include#includeusing namespace std;int main(){ int N,M,hash[1005]={0},coin; sc原创 2018-01-31 16:25:01 · 203 阅读 · 0 评论 -
算法初步—排序—A1062
思路: 1、给出n个学生的准考证号,德分,才分,及格线L和优先线H 2、根据题目要求进行排序划分即可注意: 1、由于数据量比较大,建议使用scanf和printf#include#include#include#includeusing namespace std;struct Node //学生结构体 { char id[20]; int t_gra原创 2018-01-16 09:32:22 · 246 阅读 · 0 评论 -
算法初步—排序—A1025
思路: 1、建立一个学生结构体来存储学生的成绩,考场排名,考场号,ID 2、根据要求自定义排序函数进行排序注意点: 1、对同一考场考生的排序方式:定义变量K,存放当前考场的考生人数,把结构体数组划分区间进行排序即可#include#includeusing namespace std;struct Stu//学生结构体 { string id; int l原创 2018-01-25 17:31:10 · 200 阅读 · 0 评论 -
算法初步—排序—A1028
本题比较简单,根据题目要求编写出相应的排序函数即可,注意用c语言输入输出,否则会超时#include#include#include#includeusing namespace std;struct Stu{ char name[100],id[100]; int grade;}s[100005];bool cmp1(Stu a,Stu b)//c==1,原创 2018-01-25 18:50:52 · 192 阅读 · 0 评论 -
算法初步—贪心—基本贪心问题详解
1、区间不相交问题描述:给出N个开区间(x,y),从中选择尽可能多的开区间,使得这些开区间两两没有交集。如给出区间(1,3),(2,4),(3,5),(6,7)贪心策略: 很容易想到,如果我们想让N个区间中的子区间越多越好,那么肯定子区间的长度越短越好,这样才能有更大的剩余空间留给其它空间,如果一个区间就占了(1,3),这显然不是我们愿意看到的。所以怎么不断的选择最小的区间呢,我们可原创 2018-02-02 17:38:11 · 315 阅读 · 0 评论 -
算法初步—排序—A1055
思路: 1、根据题目要求进行排序,按照财富降序排序—财富相同按年龄升序—年龄相同按名字字典序升序注意: 最好先对所有人进行排序,再根据题目要求找出符合年龄段的前num个人,否则可能会超时#include#include#include#includeusing namespace std;struct Person //富豪结构体 {原创 2018-01-27 19:39:21 · 227 阅读 · 0 评论 -
*算法初步—排序—A1075
思路: 1、考生提交答案有三种情况:未提交,编译未通过、编译通过。不妨建立学生结构体并把每道题的成绩初始化为-2(表示未提交),由于编译未通过是用-1表示,因此直接统一用高分替换低分即可 2、对于所有题目都未通过编译或未提交的不计入排名。可以用一个flag类型来判断,初始置为false,一旦某道题的输入成绩大于等于0,则变为true 3、根据题目要求编写排序函数注意点: 1、在编写排序原创 2018-01-27 22:22:46 · 250 阅读 · 0 评论 -
算法初步—贪心—A1033
思路: 本题是典型的贪心问题,想要用最少的钱行驶完全程,只需要每次选择最便宜的加油站,加最多的油即可。1、判断在最大距离范围内下一个站点A是否比当前站点便宜 2、若满足1,则只加刚好到A的油量,重复1 3、若最大距离范围内油价都比当前高,则在当前把油量加满(若可直接到达终点则无需加满) 4、选择剩下站点中最便宜的站点B,重复1注意点: 1、除了加油站数量外,全都为浮点类型 2、...原创 2018-02-08 22:09:55 · 171 阅读 · 0 评论 -
算法初步—排序—A1083
本题比较简单,没什么难点,根据题目要求按部就班即可#include#include#includeusing namespace std;struct Stu{ char name[50],id[50]; int grade;}s[1000005];bool cmp(Stu a,Stu b){ if(a.grade != b.grade)原创 2018-01-28 16:39:50 · 345 阅读 · 0 评论 -
算法初步—排序—A1080
思路: 1、用一个学生结构体来存储学生信息,一个学校结构体来存储学校信息 2、先根据总成绩和ge成绩对学生进行排序,注意存储学生的初始编号 3、根据排序结果存储每个学生的名次 4、遍历学生结构体(有序),根据学生的志愿学校,依次决定学生被哪个学校录取 5、对学校录取的学生的编号进行排序注意点: 1、最后输出时要按照录取学生的编号升序排列 2、如果学校的招生人数已满,但后一名学生与原创 2018-01-28 23:04:48 · 162 阅读 · 0 评论 -
算法初步—贪心—A1037
思路: 本题比较简单,直接用最大正值相乘和最小负值相乘即可#include<iostream>#include<cstdio>#include<algorithm>using namespace std;int main(){ int nc,np,sum=0; int c[100005],p[100005]; scanf(...原创 2018-02-09 21:45:52 · 162 阅读 · 0 评论 -
算法初步—贪心—A1070
思路: 1、根据每个不同的月饼价格计算出每个月饼的单价,根据单价进行排序,不断选择最贵的月饼出售即可注意点: 月饼的数量是浮点类型,否则会报错#include#include#include#includeusing namespace std;struct MoonCake{ float num; //月饼数量 float p原创 2018-02-05 18:12:21 · 174 阅读 · 0 评论 -
动态规划专题—最大连续子序列和—A1007
最大连续子序列和问题如下给定一个数字序列A1,A2,…,An,求i,j(1<=i<=j<=n),使得Ai+….+Aj最大,输出这个最大和。 样例:-2 11 -4 13 -5 21、令状态dp[i]表示以A[i]为结尾的连续序列的最大和,则dp[0] = -2,dp[1] = 11,dp[2] = 7,dp[3] = 20,dp[4] = 15,dp[5] ...原创 2018-02-26 12:04:39 · 1016 阅读 · 0 评论 -
算法初步—贪心—A1067
#include <iostream>#include <cstdio>using namespace std;int main(){ int N; int num[100005]; scanf("%d", &N); int left = 0; for (int i = 0; i < N; i++) {...原创 2018-02-11 23:00:02 · 232 阅读 · 0 评论 -
算法初步—散列—A1050
思路: 采用hash的思想,记录要删去的字符,输出时跳过这些字符即可#include#include#include#includeusing namespace std;int main(){ char s1[10005],s2[10005]; int hash[128] = {0}; gets(s1); gets(s2); int n1原创 2018-01-31 15:01:34 · 171 阅读 · 0 评论 -
算法初步—散列—A1041
这道题比较简单,直接运用散列的思想即可轻松解决#include#include#include#includeusing namespace std;int main(){ int N,hash[10005]={0},bet[100005]; scanf("%d",&N); for(int i=0;i<N;i++) { scanf("原创 2018-01-31 12:10:14 · 186 阅读 · 0 评论 -
入门模拟—简单模拟—A1046
思路: 1、以dis[i]表示1号结点顺时针方向到达i号结点的距离,sum表示一圈的总距离。题目要求的就是dis(left-right)和sum-dis(left-right)中的最小值。 2、dis[i]记录从第1个结点到第i个结点的距离。注意: 1、查询的两个编号left和right可能left>right 2、没有预处理dis数组会超时#includeu原创 2018-01-04 15:58:20 · 349 阅读 · 0 评论 -
入门模拟—简单模拟—A1065
思路: 1、由于long long的范围是[-2^63,2^63),因此题目中给出的两个数a,b相加有可能溢出。 2、当a+b>=2^63 显然有a+b>c成立,假设a,b都取最大值2^63-1则a+b = 2^64-2,则溢出后为(2^64-2)% 2^64 = -2 , 则当a>0,b>0,c3、同理当a,b都取最小值时,溢出值为0,则当a=0,时发生负溢出 4、不发生溢出原创 2018-01-04 16:20:04 · 401 阅读 · 0 评论 -
入门模拟—查找元素—A1036
思路: 1、令结构体Student存储学生的性别,id,姓名,成绩信息。 2、设立M,F来记录男生的最小值和女生成绩最大值#include#include#includeusing namespace std;struct Student{ string name,gender,id; int grade;}M,F,s;//M,F存储男生和女生成绩的最小值和原创 2018-01-04 17:02:19 · 201 阅读 · 0 评论 -
入门模拟—图形输出—A1031
思路: 1、题目要求输出u形字符串,且三段长n1=n3并且n1和n3尽可能小于n2的长度。 2、n1 = (len+2)/3#includeusing namespace std;int main(){ string s; int len,n1,n2; cin>>s; len = s.size(); n1 = (len+2)/3; //计算原创 2018-01-05 13:12:50 · 274 阅读 · 0 评论 -
入门模拟—进制转换—A1027
思路: 简单的进制转换题,直接转成13进制即可,注意补0#includeusing namespace std;int main(){ int a,b,c; cin>>a>>b>>c; cout"#"; if(a/13>=10) coutchar)(a/13-10+'A'); else cout13;原创 2018-01-05 14:14:04 · 248 阅读 · 0 评论 -
算法初步—排序—A1095
思路: 1、建立记录结构体,储存停车场的停车记录 2、建立一个map结构,将车辆与停车时间对应起来 3、对所有机构进行排序,排序规则相对车牌进行字典排序,再对相同车辆的进出时间进行升序 4、遍历排序好后的记录结构体数组,则相同车牌的状态为in则下一个必须为out,依据此原则取出无效记录,有效记录存放在valid中,同时更新车辆的停车时间和最长停车时间 5、对valid数组依据时间进行排序原创 2018-01-31 00:29:24 · 312 阅读 · 0 评论 -
*入门模拟—字符串处理—A 1082
#include#include#includeusing namespace std;int main(){ char num[10][5] = {"ling","yi","er","san","si","wu","liu","qi","ba","jiu"}; char wei[5][5] = {"Shi","Bai","Qian","Wan","Yi"}; c原创 2018-01-15 18:14:33 · 192 阅读 · 0 评论 -
*入门模拟—字符串处理—A1077
思路: 1、考虑要求不同长度子串的公共后缀,不如先把字符串进行翻转,转化为求公共前缀的问题注意: 1、在读入k之后要使用cin.get来接收后面的换行符,否则会导致第一个字符串读取错误 2、字符串中由于含有空格,采用getline读取整行字符串#includeusing namespace std;int main(){ int k; string s[30原创 2018-01-08 17:54:41 · 220 阅读 · 0 评论 -
入门模拟—字符串处理—A1035
思路: 此题比较容易,只需要根据题目要就对字符进行替换即可#includeusing namespace std;struct User{ string name,psw; bool ischange;}u[1005];int main(){ int k; int cnt = 0; cin>>k; for(int i=0;i<k原创 2018-01-06 16:49:56 · 171 阅读 · 0 评论 -
入门模拟—字符串处理—A1073
思路: 1、首先定位E的位置,继而就可以确定小数和指数部分位置 2、指数为负,一定输出为0.xxx,先输出0.后面照搬即可 3、指数为正,若指数大于小数位数则在输出小数后补零,若小于小数位数则在规定位置添加小数点注意: 1、根据题目要求应该是要考虑指数为0的特殊情况,不过根据测试情况来看并没有这种要求#include#includeusing namespace std;in原创 2018-01-06 16:09:55 · 199 阅读 · 0 评论 -
入门模拟—字符串处理—A1061
思路: 1、扫描前两个字符串找到第一对相同位置的A-G的大写字母(这里题目描述的不清楚,不要误认为是位置不相同的一对大写字母) 2、在位置1的基础上,向后寻找第二对位置相同的0-9或A-N字母 3、扫描后两个字符串找到第一对位置相同的字母注意: 1、扫描后两个字符串时,大写字母相同也要考虑进去#includeusing namespace std;int main(){原创 2018-01-05 15:58:57 · 249 阅读 · 0 评论 -
入门模拟—进制转换—A1058
思路: 非常简单的一道题,只要搞清三种货币之间的进制转换即可,用c语言的输入输出方式会比较简便#include#includeusing namespace std;int main(){ int a[3],b[3],c[3],carry=0; scanf("%d.%d.%d %d.%d.%d",&a[0],&b[0],&c[0],&a[1],&b[1],&c[1原创 2018-01-05 14:33:34 · 261 阅读 · 0 评论 -
算法初步—散列—A1084
思路: 1、同时遍历两个字符串,出现不相等则说明有残缺键位 2、建立hash数组,将字符与是否统计过映射起来注意点: 1、英文字母统一输出为大写字母#include#include#includeusing namespace std;int main(){ char s1[100],s2[100]; int hash[200] = {0}; sca原创 2018-01-31 11:19:56 · 181 阅读 · 0 评论 -
算法初步—散列—A1092
思路: 1、引入一个hash数组来对应字符串字符和数量 2、统计超市已有的各个颜色数量 3、根据要求的各颜色数量,判断是否符合条件以及缺少多少#include#include#include#includeusing namespace std;int main(){ char s1[1005],s2[1005]; int hash[200] = {0};原创 2018-01-31 11:41:25 · 168 阅读 · 0 评论 -
算法初步—贪心—A1038
思路: 给出一堆数字字符串,问怎样组合可以得到最小值。仔细观察可以发现只要按字典序排序,好像可以大致满足要求,但是字典序排序是有缺陷的比如32和321字典排序的结果为32321,而实际上32132是最小的,因此我们得出了贪心策略。策略: 将字符串a和字符串b相加,比较a+b和b+a,返回值更小的那一个注意: 当字符串全为0时,输出0#include <iostream&...原创 2018-02-11 23:20:16 · 215 阅读 · 0 评论
分享