PAT甲级1074,1075解题报告

2024-03-19 04:58
文章标签 报告 解题 pat 甲级 1075 1074

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

1074 Reversing Linked List (25 point(s))

Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elements on L. For example, given L being 1→2→3→4→5→6, if K=3, then you must output 3→2→1→6→5→4; if K=4, you must output 4→3→2→1→5→6.

Input Specification:

Each input file contains one test case. For each case, the first line contains the address of the first node, a positive N (≤10​5​​) which is the total number of nodes, and a positive K (≤N) which is the length of the sublist to be reversed. The address of a node is a 5-digit nonnegative integer, and NULL is represented by -1.

Then N lines follow, each describes a node in the format:

Address Data Next

where Address is the position of the node, Data is an integer, and Next is the position of the next node.

Output Specification:

For each case, output the resulting ordered linked list. Each node occupies a line, and is printed in the same format as in the input.

Sample Input:

00100 6 4
00000 4 99999
00100 1 12309
68237 6 -1
33218 3 00000
99999 5 68237
12309 2 33218

Sample Output:

00000 4 33218
33218 3 12309
12309 2 00100
00100 1 99999
99999 5 68237
68237 6 -1

题目大意:链表反转。

解题思路:其实挺水,有个坑就是反转的时候要注意。不一定是反转一次的,可能反转多次,他的意思不是前K个反转一次,而是每K个反转一次。

代码如下

#include<iostream>
#include<string.h>
#include<vector>
#include<algorithm>
#include<iomanip>
#include<time.h>
#include<math.h>
#include<set>
#include<list>
#include<climits>
#include<queue>
#include<cstring>
#include<map>
#include<stack>
#include<string>
using namespace std;
struct Node {int addr;int data;int next;
};
map<int, Node> a;
vector<Node> res;
int main() {int begin; int N, K;scanf("%d %d %d", &begin,&N,&K);for (int i = 0; i < N; i++) {Node tmp;scanf("%d %d %d", &tmp.addr, &tmp.data, &tmp.next);a[tmp.addr] = tmp;}while (true) {if (begin == -1)break;res.push_back(a[begin]);begin = a[begin].next;}int kao = 0;for (int i = 0; i < res.size() / K; i++) {reverse(res.begin() + kao, res.begin() + kao + K);kao = kao+K;}for (int i = 0; i < res.size(); i++) {if (i != res.size()-1)printf("%05d %d %05d\n",res[i].addr,res[i].data,res[i+1].addr);elseprintf("%05d %d -1\n", res[i].addr, res[i].data);}return 0;
}

1075 PAT Judge (25 point(s))

The ranklist of PAT is generated from the status list, which shows the scores of the submissions. This time you are supposed to generate the ranklist for PAT.

Input Specification:

Each input file contains one test case. For each case, the first line contains 3 positive integers, N (≤10​4​​), the total number of users, K (≤5), the total number of problems, and M (≤10​5​​), the total number of submissions. It is then assumed that the user id's are 5-digit numbers from 00001 to N, and the problem id's are from 1 to K. The next line contains K positive integers p[i] (i=1, ..., K), where p[i] corresponds to the full mark of the i-th problem. Then M lines follow, each gives the information of a submission in the following format:

user_id problem_id partial_score_obtained

where partial_score_obtained is either −1 if the submission cannot even pass the compiler, or is an integer in the range [0, p[problem_id]]. All the numbers in a line are separated by a space.

Output Specification:

For each test case, you are supposed to output the ranklist in the following format:

rank user_id total_score s[1] ... s[K]

where rank is calculated according to the total_score, and all the users with the same total_score obtain the same rank; and s[i] is the partial score obtained for the i-th problem. If a user has never submitted a solution for a problem, then "-" must be printed at the corresponding position. If a user has submitted several solutions to solve one problem, then the highest score will be counted.

The ranklist must be printed in non-decreasing order of the ranks. For those who have the same rank, users must be sorted in nonincreasing order according to the number of perfectly solved problems. And if there is still a tie, then they must be printed in increasing order of their id's. For those who has never submitted any solution that can pass the compiler, or has never submitted any solution, they must NOT be shown on the ranklist. It is guaranteed that at least one user can be shown on the ranklist.

Sample Input:

7 4 20
20 25 25 30
00002 2 12
00007 4 17
00005 1 19
00007 2 25
00005 1 20
00002 2 2
00005 1 15
00001 1 18
00004 3 25
00002 2 25
00005 3 22
00006 4 -1
00001 2 18
00002 1 20
00004 1 15
00002 4 18
00001 3 4
00001 4 2
00005 2 -1
00004 2 0

Sample Output:

1 00002 63 20 25 - 18
2 00005 42 20 0 22 -
2 00007 42 - 25 - 17
2 00001 42 18 18 4 2
5 00004 40 15 0 25 -

题目大意:模拟一下PAT考试的排名

解题思路:坑死!怎么搞都过不去最后一个样例,找了别人的代码来交只能,先说下我的想法,其实就是正常人做的模拟,用一个id关联到结构体数组,然后最后一个样例一直超时,然后我发现。。map虽然当key不存在的时候会自动创建一个对应的value,但是这个过程是极为耗时的,所以要在一开始初始化,但是初始化完成后,超时是不超时了,开始WA了。。不知道为什么,我现在想想可能是因为存在一种很多人,但是没有一个人能上榜的情况,这样我的代码是跑不了的,当然只是猜测。我也很绝望。

我的代码:

#include<iostream>
#include<string.h>
#include<vector>
#include<algorithm>
#include<iomanip>
#include<time.h>
#include<math.h>
#include<set>
#include<list>
#include<climits>
#include<queue>
#include<cstring>
#include<map>
#include<stack>
#include<string>
using namespace std;
int K;
struct stu {int id;map<int, int> score;bool flag=false;int solans = 0;int total = 0;//map<int, bool> ansp;int index;stu() :flag(false){for (int i = 0; i < K; i++) {score[i + 1] = -1;}}
};
int pro[6];
vector<stu> res;
map<int, stu> lt;
bool cmp(stu a, stu b) {if (a.total > b.total) {return true;}else if (a.total == b.total) {if (a.solans > b.solans) {return true;}else if (a.solans == b.solans) {return a.id < b.id;}elsereturn false;}else {return false;}
}
int main() {int N, M;scanf("%d %d %d",&N,&K,&M);for (int i = 0; i < N; i++) {stu a;lt[i + 1] = a;}for (int i = 0; i < K; i++)scanf("%d", &pro[i]);for (int i = 0; i < M; i++) {int tmpid;int tmpto;int tmpsco;scanf("%d %d %d", &tmpid, &tmpto, &tmpsco);if (tmpsco == -1) {lt[tmpid].id = tmpid;//lt[tmpid].ansp[tmpto] = true;lt[tmpid].score[tmpto] = 0;}else {lt[tmpid].id = tmpid;//lt[tmpid].ansp[tmpto] = true;if (lt[tmpid].score[tmpto] < tmpsco) {//lt[tmpid].total = lt[tmpid].total - lt[tmpid].score[tmpto] + tmpsco;lt[tmpid].score[tmpto] = tmpsco;}if (lt[tmpid].score[tmpto] == pro[tmpto - 1])lt[tmpid].solans += 1;lt[tmpid].flag = true;}}for (auto i = lt.begin(); i != lt.end(); i++) {if (i->second.flag) {for (int j = 0; j < K; j++) {if(i->second.score[j + 1]!=-1)i->second.total += i->second.score[j + 1];}res.push_back(i->second);}}sort(res.begin(), res.end(), cmp);int index;res[0].index = 1;for (int i = 1; i < res.size(); i++) {if (res[i].total < res[i - 1].total) {index = i + 1;res[i].index = index;}else {res[i].index = index;}}for (int i = 0; i < res.size(); i++) {printf("%d %05d %d ", res[i].index,res[i].id,res[i].total);for (int j = 1; j <=K; j++) {if (res[i].score[j]!=-1) {printf("%d", res[i].score[j]);}else {printf("-");}if (j != K)printf(" ");elseprintf("\n");}}return 0;
}

别人的满分代码

struct student {int id;int score[6];bool flag = false;int solve = 0;int total = 0;
}s[10010];bool cmp(student a, student b) {if (a.total != b.total) return a.total > b.total;else if (a.solve != b.solve) return a.solve > b.solve;else return  a.id < b.id;
}int main() {int n, k, m, i;scanf("%d %d %d", &n, &k, &m);int p[6];for (i = 1; i <= k; i++) {scanf("%d", &p[i]);}for ( i = 1; i <= n; i++) {//我还是不知道,在我输入id之后,再赋值s[id].id=id为什么最后一个测试点过不了,必须在这里初始化s[i].id = i;memset(s[i].score, -1, sizeof(s[i].score));}int id, num, temp;for (i = 1; i <= m; i++) {scanf("%d %d %d", &id, &num, &temp);if (temp != -1) s[id].flag = true;if (temp == -1 && s[id].score[num] == -1) s[id].score[num] = 0;if (temp == p[num] && s[id].score[num] < p[num]) s[id].solve++;//这个语句要在下一个语句之前,不然temp已经存进去了if (temp > s[id].score[num]) s[id].score[num] = temp;}for (i = 1; i <= n; i++) {for (int j = 1; j <= k; j++) {if (s[i].score[j] != -1 ) s[i].total += s[i].score[j];}}sort(s + 1, s + n + 1, cmp);int r = 1;for (i = 1; i <= n && s[i].flag == true; i++) {//只输出能够输出的if (i > 1 && s[i].total != s[i - 1].total) r = i;printf("%d %05d %d", r, s[i].id, s[i].total);for (int j = 1; j <= k; j++) {if (s[i].score[j] == -1) printf(" -");else printf(" %d", s[i].score[j]);}printf("\n");}return 0;
}

自闭了。

这篇关于PAT甲级1074,1075解题报告的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

Python:豆瓣电影商业数据分析-爬取全数据【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】

**爬取豆瓣电影信息,分析近年电影行业的发展情况** 本文是完整的数据分析展现,代码有完整版,包含豆瓣电影爬取的具体方式【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】   最近MBA在学习《商业数据分析》,大实训作业给了数据要进行数据分析,所以先拿豆瓣电影练练手,网络上爬取豆瓣电影TOP250较多,但对于豆瓣电影全数据的爬取教程很少,所以我自己做一版。 目

开题报告中的研究方法设计:AI能帮你做什么?

AIPaperGPT,论文写作神器~ https://www.aipapergpt.com/ 大家都准备开题报告了吗?研究方法部分是不是已经让你头疼到抓狂? 别急,这可是大多数人都会遇到的难题!尤其是研究方法设计这一块,选定性还是定量,怎么搞才能符合老师的要求? 每次到这儿,头脑一片空白。 好消息是,现在AI工具火得一塌糊涂,比如ChatGPT,居然能帮你在研究方法这块儿上出点主意。是不

【干货分享】基于SSM的体育场管理系统的开题报告(附源码下载地址)

中秋送好礼 中秋佳节将至,祝福大家中秋快乐,阖家幸福。本期免费分享毕业设计作品:《基于SSM的体育场管理系统》。 基于SSM的体育场管理系统的开题报告 一、课题背景与意义 随着全民健身理念的深入人心,体育场已成为广大师生和社区居民进行体育锻炼的重要场所。然而,传统的体育场管理方式存在诸多问题,如资源分配不均、预约流程繁琐、数据统计不准确等,严重影响了体育场的使用效率和用户体验。

[SWPUCTF 2021 新生赛]web方向(一到六题) 解题思路,实操解析,解题软件使用,解题方法教程

题目来源 NSSCTF | 在线CTF平台因为热爱,所以长远!NSSCTF平台秉承着开放、自由、共享的精神,欢迎每一个CTFer使用。https://www.nssctf.cn/problem   [SWPUCTF 2021 新生赛]gift_F12 这个题目简单打开后是一个网页  我们一般按F12或者是右键查看源代码。接着我们点击ctrl+f后快速查找,根据题目给的格式我们搜索c

【中国国际航空-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞 所以大部分网站及App 都采取图形验证码或滑动验证码等交互解决方案, 但在机器学习能力提高的当下,连百度这样的大厂都遭受攻击导致点名批评, 图形验证及交互验证方式的安全性到底如

hdu1879(解题报告)

继续畅通工程                                   Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

hdu2033(解题报告)

人见人爱A+B                                   Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

HDU3791(解题报告)

二叉搜索树                      Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)                                          Total Subm