2014-03-01 春季PAT 1073-1076解题报告
今天下午的PAT考试状态不理想,回来怒刷了一遍,解题报告如下:
1073. Scientific Notation (20)
基本模拟题,将一长串的科学计数转换为普通的数字表示方式。思路是是数组存储输入,然后找到指数位置,并根据指数的大小和正负对前面的小数进行针对性的处理。
#include <iostream>
#include <cstring>
#include <algorithm> using namespace std; class PAT{
public:
enum { N = , };
char num[N];
int finger,epos,length;
void run();
}; void PAT::run()
{
scanf("%s", &num);
length = strlen(num);
epos = find(num, num + length, 'E') - num;
sscanf(num + epos + , "%d", &finger);
if (num[epos + ] == '-') finger = - * finger;
if(num[]=='-')printf("%c", num[]);
int i, j;
if (finger >= )
{
printf("%c", num[]);
for (i = ; i < epos && finger > ; i++,finger--) printf("%c", num[i]);
if (i < epos) { printf("."); for (; i < epos; i++)printf("%c", num[i]); }
else if (finger > ) while (finger > ){ printf(""); finger--; }
}
else
{
printf("0."); finger++;
while (finger < ) {printf(""); finger++;}
printf("%c", num[]);
for (int i = ; i < epos; i++)printf("%c", num[i]);
}
}
int main()
{
//freopen("input.txt", "r", stdin);
PAT *p = new PAT;
p->run();
return ;
}
PAT 1074. Reversing Linked List (25)
这个题不难,关键是要细心,首先要看懂题意。题目说的逆转排序是指每隔K个节点就将这k个节点的顺序颠倒过来,而如果最后不足K个节点的话,是不进行颠倒的,我下午考试的时候把这个意思弄错了,以为最后的节点也要进行颠倒,结果当然不对。这个题可以用map来做,不过据我同学说,用map查询会超时,我没有这样试过,不知道究竟如何,我使用的是hash的办法,直接在数组里面存储,速度会快点。
另外,这个题跟前面1052题的链表排序一样,有一个陷阱,就是不是所有给出的节点都属于此链表,需要判断,最后一个测试点是这个陷阱,不过这个点只有1分,姥姥出题的时候还是很人道。不过很多人这个点都没过。
#include <iostream> using namespace std; class PAT
{
public:
enum{N=};
struct Node
{
int addr, data, next;
};
Node node[N];
int hash[N];//addr->index
int addr[N];//index->addr
int n,k,head;
void run();
}; void PAT::run()
{
scanf("%d%d%d", &head, &n, &k);
for (int i = ; i < n; i++)
{
scanf("%d%d%d", &node[i].addr, &node[i].data, &node[i].next);
hash[node[i].addr] = i;
}
int cur = head,c=;
while (cur != -)
{
addr[c] = node[hash[cur]].addr;
cur = node[hash[cur]].next;
c++; //节点计数
}
n = c; //排除不在链表中的节点
for (int i = ; i < n; i = i + k)
{
int r = (i + k<= n) ? i + k - : n - ;
if (i + k <= n)
{
for (int j = r; j > i; j--)
{
node[hash[addr[j]]].next = node[hash[addr[j - ]]].addr;
}
if (r == n - ) node[hash[addr[i]]].next = -;
else node[hash[addr[i]]].next = (i + * k <= n) ? node[hash[addr[i + *k -]]].addr : node[hash[addr[i+k]]].addr;
if (r!=n-)
for (int j = r; j >= i; j--) printf("%05d %d %05d\n", node[hash[addr[j]]].addr, node[hash[addr[j]]].data, node[hash[addr[j]]].next);
else
{
for (int j = r; j > i; j--) printf("%05d %d %05d\n", node[hash[addr[j]]].addr, node[hash[addr[j]]].data, node[hash[addr[j]]].next);
printf("%05d %d -1\n", node[hash[addr[i]]].addr, node[hash[addr[i]]].data);
}
}
else
{
for (int j = i; j < n-; j++) printf("%05d %d %05d\n", node[hash[addr[j]]].addr, node[hash[addr[j]]].data, node[hash[addr[j]]].next);
printf("%05d %d -1\n", node[hash[addr[n-]]].addr, node[hash[addr[n-]]].data);
}
}
} int main()
{
//freopen("input.txt", "r", stdin);
PAT *p = new PAT;
p->run();
return ;
}
这个题是一个常规的排序题,排序的时候仔细点。有一个要注意的地方是,如果提交了没有编译通过,submit里面显示的分数是-1,但是最终输出要输出为0。
#include <iostream>
#include <algorithm>
using namespace std; struct User
{
int id, total, score[], rank, solved;
bool onlist;
}; class PAT
{
public:
enum{N=};
User user[N];
int fullscore[N];
int n, k, m;
void run();
void printscore(const User &u);
}; bool cmp(const User &u1, const User &u2)
{
if (u1.total != u2.total) return u1.total > u2.total;
else if (u1.solved != u2.solved) return u1.solved > u2.solved;
else return u1.id < u2.id;
} void PAT::printscore(const User &u)
{
for (int i = ; i <= k; i++)
{
if (u.score[i] == -) printf(" -");
else if (u.score[i] == -) printf("");
else printf(" %d", u.score[i]);
}
} void PAT::run()
{
scanf("%d%d%d", &n, &k, &m);
for (int i = ; i<n; i++)
{
user[i].id = i+;
user[i].total = ;
user[i].solved = ;
user[i].onlist = false;
for (int j = ; j <= k; j++)
user[i].score[j] = -;
}
for (int i = ; i <= k; i++) scanf("%d", &fullscore[i]);
int tid, tpid, tscore;
while (m-- > )
{
scanf("%d%d%d", &tid, &tpid, &tscore);
if (user[tid-].score[tpid] < tscore) user[tid-].score[tpid] = tscore;
}
for (int i = ; i < n; i++)
{
for (int j = ; j <= k; j++)
{
if (user[i].score[j] >= )
{
user[i].total += user[i].score[j]; user[i].onlist = true;
}
if (user[i].score[j] == fullscore[j]) user[i].solved++;
}
}
sort(user, user + n, cmp);
user[].rank = ;
for (int i = ; i < n; i++)
{
if (user[i].total == user[i - ].total) user[i].rank = user[i - ].rank;
else user[i].rank = i+;
}
for (int i = ; i < n; i++)
{
if (user[i].onlist)
{
printf("%d %05d %d", user[i].rank, user[i].id, user[i].total);
printscore(user[i]);
printf("\n");
}
else break;
}
} int main()
{
//freopen("input.txt", "r", stdin);
PAT *p = new PAT;
p->run();
return ;
}
这个题直接用BFS搜索遍历即可。
#include <iostream>
#include <vector> using namespace std; class PAT
{
public:
enum{N=};
vector<int> fans[N];
vector<int> curfans;
int vis[N];
int n, level, k;
void run();
void bfs(int);
int maxforward;
}; void PAT::run()
{
scanf("%d%d", &n, &level);
int tnum,tfol;
for (int i = ; i <= n; i++)
{
scanf("%d", &tnum);
while (tnum-- > )
{
scanf("%d", &tfol);
fans[tfol].push_back(i);
}
}
scanf("%d", &k);
int qnum;
while (k-- > )
{
scanf("%d", &qnum);
fill(vis, vis + N, );
curfans.clear();
maxforward = ;
vis[qnum] = ;
int fansize = fans[qnum].size();
for (int i = ; i < fansize; i++)
{
curfans.push_back(fans[qnum][i]);
vis[fans[qnum][i]] = ;
}
bfs(level);
printf("%d\n", maxforward);
} } void PAT::bfs(int l)
{
if (l == ) return;
if (curfans.empty()) return;
int fansize = curfans.size(); maxforward += fansize;
vector<int> tmp;
for (int i = ; i < fansize; i++)
{
int fansize2 = fans[curfans[i]].size();
vector<int> &cur = fans[curfans[i]];
for (int j = ; j < fansize2; j++)
{
if (vis[cur[j]] == ) {
tmp.push_back(cur[j]); vis[cur[j]] = ;
}
}
}
curfans.clear();
curfans.resize(tmp.size());
copy(tmp.begin(), tmp.end(), curfans.begin());
bfs(l-);
}
int main()
{
//freopen("input.txt", "r", stdin);
PAT *p = new PAT;
p->run();
return ;
}
2014-03-01 春季PAT 1073-1076解题报告的更多相关文章
- Facebook Hacker Cup 2014 Qualification Round 竞赛试题 Square Detector 解题报告
Facebook Hacker Cup 2014 Qualification Round比赛Square Detector题的解题报告.单击这里打开题目链接(国内访问需要那个,你懂的). 原题如下: ...
- Cheatsheet: 2014 03.01 ~ 03.31
.NET Should I be concerned about PDB files? async and await -Simplified-Internals Web Performance tr ...
- 2014 UESTC暑前集训搜索专题解题报告
A.解救小Q BFS.每次到达一个状态时看是否是在传送阵的一点上,是则传送到另一点即可. 代码: #include <iostream> #include <cstdio> # ...
- 2014 UESTC暑前集训数据结构专题解题报告
A.Islands 这种联通块的问题一看就知道是并查集的思想. 做法:从高水位到低水位依序进行操作,这样每次都有新的块浮出水面,可以在前面的基础上进行合并集合的操作.给每个位置分配一个数字,方便合并集 ...
- 2014 UESTC暑前集训动态规划专题解题报告
A.爱管闲事 http://www.cnblogs.com/whatbeg/p/3762733.html B.轻音乐同好会 C.温泉旅馆 http://www.cnblogs.com/whatbeg/ ...
- 2014 UESTC暑前集训图论专题解题报告
A.方老师和缘分 http://www.cnblogs.com/whatbeg/p/3765621.html B.方老师和农场 http://www.cnblogs.com/whatbeg/p/376 ...
- 【百度之星2014~初赛(第二轮)解题报告】JZP Set
声明 笔者近期意外的发现 笔者的个人站点http://tiankonguse.com/ 的非常多文章被其他站点转载,可是转载时未声明文章来源或參考自 http://tiankonguse.com/ 站 ...
- 2014 ACM/ICPC 鞍山赛区现场赛 D&I 解题报告
鞍山现场赛结束了呢-- 我们出的是D+E+I三道题-- 吾辈AC掉的是D和I两道,趁着还记得.先在这里写一写我写的两道水题D&I的解题报告吧^_^. D题的意思呢是说星云内有一堆排成一条直线的 ...
- Hackerrank 2020 February 2014 解题报告
Hackerrank 2020 February 2014 解题报告 比赛链接 Sherlock and Watson (20分) 题意:给定一个数组,向右平移K次,然后有Q个询问,问第x位置上是几 ...
随机推荐
- J - Mr.Panda and TubeMaster
题解 我们可以把每个格子拆成两个点,一个表示横向的,一个表示纵向的,相邻的格子横向和纵向连边. 如果直接按照题意做的话,我们应当在横向和纵向的点之间连边,有限制的边设下界为1,然后跑可行流. 或者考虑 ...
- 插头DP讲解+[BZOJ1814]:Ural 1519 Formula 1(插头DP)
1.什么是插头$DP$? 插头$DP$是$CDQ$大佬在$2008$年的论文中提出的,是基于状压$D$P的一种更高级的$DP$多用于处理联通问题(路径问题,简单回路问题,多回路问题,广义回路问题,生成 ...
- 冲刺周六 Fighting SaturDay
一.Saturday照片 二.项目分工 三.今日份燃尽图 四.项目进展 码云团队协同环境构建完毕 利用Leangoo制作任务分工及生成燃尽图 完成AES加解密部分代码 用代码实现对文件的新建.移动.复 ...
- ajax传递json参数
var pros = []; for(var i = 1; i <= 2; i++) { var obj = {}; obj.id = i; obj.age = i*20; pros = pro ...
- VB6 Webbowser控件与JS交互,无边框和屏蔽右键菜单
1. 屏蔽右键菜单 在菜单中单击"工程"->"引用",在列表中找到"Microsoft HTML Object Library"打上 ...
- VMware 虚拟化编程(11) — VMware 虚拟机的全量备份与增量备份方案
目录 目录 前文列表 全量备份数据的获取方式 增量备份数据的获取过程 前文列表 VMware 虚拟化编程(1) - VMDK/VDDK/VixDiskLib/VADP 概念简析 VMware 虚拟化编 ...
- SSM003/构建Maven单模块项目(一)
一.环境准备 1.开发工具:IDEA 2.JDK版本:jdk1.8 3.Maven版本:apache-maven-3.2.5 4.数据库mysql. 二.基于Maven构建web项目 Step1:Fi ...
- tbox新增stackless协程支持
tbox之前提供的stackfull协程库,虽然切换效率已经非常高了,但是由于每个协程都需要维护一个独立的堆栈, 内存空间利用率不是很高,在并发量非常大的时候,内存使用量会相当大. 之前考虑过采用st ...
- python基础-8迭代器(iter)和生成器(yield)
一 生成器 从Python2.2起,生成器提供了一种简洁的方式帮助返回列表元素的函数来完成简单和有效的代码. 它基于yield指令,允许停止函数并立即返回结果.此函数保存其执行上下文,如果需要,可立即 ...
- 2019春第十二周作业Compile Summarize
这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 这里 我在这个课程的目标是 能按自己的想法解出题目 这个作业在那个具体方面帮助我实现目标 能朝着软件工程师方向发展 参考文献与网址 C语言 ...