`
liqiangzju
  • 浏览: 19674 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

2014-03-01 春季PAT 1073-1076解题报告

pat 
阅读更多

今天下午的PAT考试状态不理想,回来怒刷了一遍,解题报告如下:

 

1073. Scientific Notation (20)

基本模拟题,将一长串的科学计数转换为普通的数字表示方式。思路是是数组存储输入,然后找到指数位置,并根据指数的大小和正负对前面的小数进行针对性的处理。

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;


class PAT{
public:
	enum { N = 10000, };
	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 + 2, "%d", &finger);
	if (num[epos + 1] == '-') finger = -1 * finger;
	if(num[0]=='-')printf("%c", num[0]);
	int i, j;
	if (finger >= 0)
	{
		printf("%c", num[1]);
		for (i = 3; i < epos && finger > 0; i++,finger--) printf("%c", num[i]);
		if (i < epos) { printf("."); for (; i < epos; i++)printf("%c", num[i]); }
		else if (finger > 0) while (finger > 0){ printf("0"); finger--; }
	}
	else
	{
		printf("0."); finger++;
		while (finger < 0) {printf("0"); finger++;}
		printf("%c", num[1]);
		for (int i = 3; i < epos; i++)printf("%c", num[i]);
	}
}
int main()
{
	//freopen("input.txt", "r", stdin);
	PAT *p = new PAT;
	p->run();
	return 0;
}

 

PAT 1074. Reversing Linked List (25)

这个题不难,关键是要细心,首先要看懂题意。题目说的逆转排序是指每隔K个节点就将这k个节点的顺序颠倒过来,而如果最后不足K个节点的话,是不进行颠倒的,我下午考试的时候把这个意思弄错了,以为最后的节点也要进行颠倒,结果当然不对。这个题可以用map来做,不过据我同学说,用map查询会超时,我没有这样试过,不知道究竟如何,我使用的是hash的办法,直接在数组里面存储,速度会快点。

 

另外,这个题跟前面1052题的链表排序一样,有一个陷阱,就是不是所有给出的节点都属于此链表,需要判断,最后一个测试点是这个陷阱,不过这个点只有1分,姥姥出题的时候还是很人道。不过很多人这个点都没过。

#include <iostream>

using namespace std;

class PAT
{
public:
	enum{N=100000};
	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 = 0; 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=0;
	while (cur != -1)
	{
		addr[c] = node[hash[cur]].addr;
		cur = node[hash[cur]].next;
		c++; //节点计数
	}
	n = c; //排除不在链表中的节点
	for (int i = 0; i < n; i = i + k)
	{
		int r = (i + k<= n) ? i + k - 1 : n - 1;
		if (i + k <= n)
		{
			for (int j = r; j > i; j--)
			{
				node[hash[addr[j]]].next = node[hash[addr[j - 1]]].addr;
			}
			if (r == n - 1) node[hash[addr[i]]].next = -1;
			else node[hash[addr[i]]].next = (i + 2 * k <= n) ? node[hash[addr[i + 2*k -1]]].addr : node[hash[addr[i+k]]].addr;
			if (r!=n-1)
				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-1; 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-1]]].addr, node[hash[addr[n-1]]].data);
		}
	}
}


int main()
{
	//freopen("input.txt", "r", stdin);
	PAT *p = new PAT;
	p->run();
	return 0;
}

 

1075. PAT Judge (25)

这个题是一个常规的排序题,排序的时候仔细点。有一个要注意的地方是,如果提交了没有编译通过,submit里面显示的分数是-1,但是最终输出要输出为0。

#include <iostream>
#include <algorithm>
using namespace std;

struct User
{
	int id, total, score[6], rank, solved;
    bool onlist;
};

class PAT
{
public:
	enum{N=10000};
	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 = 1; i <= k; i++)
	{
		if (u.score[i] == -2) printf(" -");
		else if (u.score[i] == -1) printf(" 0");
		else printf(" %d", u.score[i]);
	}
}

void PAT::run()
{
	scanf("%d%d%d", &n, &k, &m);
	for (int i = 0; i<n; i++)
	{
		user[i].id = i+1;
		user[i].total = 0;
		user[i].solved = 0;
		user[i].onlist = false;
		for (int j = 1; j <= k; j++)
			user[i].score[j] = -2;
	}
	for (int i = 1; i <= k; i++) scanf("%d", &fullscore[i]);
	int tid, tpid, tscore;
	while (m-- > 0)
	{
		scanf("%d%d%d", &tid, &tpid, &tscore);
		if (user[tid-1].score[tpid] < tscore) user[tid-1].score[tpid] = tscore;
	}
	for (int i = 0; i < n; i++)
	{
		for (int j = 1; j <= k; j++)
		{
			if (user[i].score[j] >= 0)
			{
				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[0].rank = 1;
	for (int i = 1; i < n; i++)
	{
		if (user[i].total == user[i - 1].total) user[i].rank = user[i - 1].rank;
		else user[i].rank = i+1;
	}
	for (int i = 0; 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 0;
}

 

1076. Forwards on Weibo (30)

这个题直接用BFS搜索遍历即可。

#include <iostream>
#include <vector>

using namespace std;

class PAT
{
public:
	enum{N=1001};
	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 = 1; i <= n; i++)
	{
		scanf("%d", &tnum);
		while (tnum-- > 0)
		{
			scanf("%d", &tfol);
			fans[tfol].push_back(i);
		}
	}
	scanf("%d", &k);
	int qnum;
	while (k-- > 0)
	{
		scanf("%d", &qnum);
		fill(vis, vis + N, 0);
		curfans.clear();
		maxforward = 0;
		vis[qnum] = 1;
		int fansize = fans[qnum].size();
		for (int i = 0; i < fansize; i++)
		{
			curfans.push_back(fans[qnum][i]);
			vis[fans[qnum][i]] = 1;
		}
		bfs(level);
		printf("%d\n", maxforward);
	}

}

void PAT::bfs(int l)
{
	if (l == 0) return;
	if (curfans.empty()) return;
	int fansize = curfans.size();

	maxforward += fansize;
	vector<int> tmp;
	for (int i = 0; i < fansize; i++)
	{
		int fansize2 = fans[curfans[i]].size();
		vector<int> &cur = fans[curfans[i]];
		for (int j = 0; j < fansize2; j++)
		{
			if (vis[cur[j]] == 0) {
				tmp.push_back(cur[j]); vis[cur[j]] = 1; 
			}
		}
	}
	curfans.clear();
	curfans.resize(tmp.size());
	copy(tmp.begin(), tmp.end(), curfans.begin());
	bfs(l-1);
}
int main()
{
	//freopen("input.txt", "r", stdin);
	PAT *p = new PAT;
	p->run();
	return 0;
}

 

 

分享到:
评论

相关推荐

    浙大计算机能力测试练习题PAT 1073 1076

    题目1073到1076属于PAT的一组练习题,根据描述,这些题目在2014年3月1日的考试中出现,并且被评价为难度适中。下面我们将对这些题目涉及的知识点进行详细的解析。 首先,我们来看题目1073。由于具体题目内容未给出...

    网络安全技术- NAT-04 NAT和PAT.mp3

    网络安全技术- NAT-04 NAT和PAT.mp3

    pat basic 1073

    pat乙级1073的题解,各位各位为假按揭扩大进口大量发放大房间大酒店卡积分都卡了发放京东卡冷风机答非

    网络安全技术- NAT-06 在路由器上配置PAT.mp3

    网络安全技术- NAT-06 在路由器上配置PAT.mp3

    AR1220-S-V200R010SPH007.pat

    华为路由器AR1220-S-V200R010SPH007 AR1220-S-V200R010SPH007.pat 补丁文件

    ts解析器----pmt-pat- pa

    PAT(Program Association Table,节目关联表)是TS解析过程中的关键组件,它提供了整个TS中PTS(Program Map Table,节目映射表)的索引。PAT中包含了一组节目(Program)的PID,这些PID指向不同的PTS,每个PTS定义...

    华为Quidway S3300 V100R005C01SPC100固件包的 s23_33_53-v100r005sph008.pat

    华为Quidway S3300 V100R005C01SPC100固件包的补丁文件s23_33_53-v100r005sph008.pat

    ns-2.26-gcc410.patch.rar_gcc 410 for ns 2.26_ns-2.26-gcc410.patc

    标签"gcc_410_for_ns_2.26"、"ns-2.26-gcc410.patch"、"ns-allinone"、"ns2.26"以及"s-2.26-gcc410.pat"进一步强调了这个补丁与ns-2.26和GCC 4.1.0之间的关联,同时提到了"ns-allinone",这是ns-2的一个打包版本,...

    richenyunqi#CCF-CSP-and-PAT-solution#1076. Wifi密码1

    当正确选项是 A、B、C、D 时,分别输出 1、2、3、4。输入输出格式输入第一行给出一个正整数 N,随后 N 行,每行按照“编号-答案”的格式给出一道题的 4

    CSP-J CSP-S NOIP 蓝桥杯 PAT等资料1-20(2021.01.12).rar

    其中,“宝宝的编程系列书籍介绍-2021-01-01(C).pdf”可能是为初学者准备的编程入门指南,可能涵盖了C语言的基础知识,适合年龄较小的参赛者或编程新手。而“3、信息学奥赛零基础入门书籍介绍(小学生)--C++版-...

    PAT全套答案_1001至1049.rar

    标题中的"PAT全套答案_1001至1049.rar"指的是一个包含PAT考试(编程能力评估测试)从题目编号1001到1049的完整答案的压缩文件。PAT是针对计算机科学和信息技术专业学生的一项重要考试,旨在测试他们的编程能力、算法...

    lora-l101-pAT-demo-V1.0.rar

    标题 "lora-l101-pAT-demo-V1.0.rar" 暗示这是一个关于LoRa技术的软件演示版本,版本号为V1.0,且与lora-l101-pAT模块有关。描述 "lora-l101-pAT-demo-V1.0" 是对压缩包内容的简单重复,没有提供额外信息。标签 ...

    NAS群辉安装-DS918+-引导文件.img-DS918+-23824.pat

    标题"NAS群辉安装-DS918+-引导文件.img-DS918+-23824.pat"暗示了这是一个关于DS918+ NAS设备的系统安装教程,其中包含引导文件(boot image)和一个名为"23824.pat"的系统更新包。引导文件是操作系统启动时所需的...

    ZJU-PAT-Data-Structure-Source-code.rar_PAT test_PAT答案_PAT题集_浙大zi

    浙江大学Programming Ability Test《数据结构学习与实验指导》实验项目集里面30道题左右的答案。 网址http://pat.zju.edu.cn/ 做PAT里面的题时,我自己写得代码。

    DSM_DS918+_23824.pat

    DSM

    2020PAT春季甲级 题目及AC代码

    2020年春季的PAT甲级考试是众多计算机科学和技术爱好者以及学生参与的重要赛事。 在这个压缩包文件中,我们可以找到该次考试的题目和对应的【AC代码】。"AC"是编程竞赛中常见的术语,代表"Accepted",意味着提交的...

    DSM-DS918+-42962.pat

    DSM-DS918+-42962.pat

    dcu2pat,make Delphi .dcu to .pat!!

    dcu2pat,make Delphi .dcu to .pat!! http://redplait.blogspot.com/2013/05/dcu2pat.html I wrote today some simple hack tool for creating signatures from delphi .dcu files for IDA flair The main idea is ...

    CAD填充图案(三百多种)-.pat文件

    CAD填充图案(三百多种)-.pat文件 部分如下(篇幅有限) 2x12木地板.pat 45度人字形砖面(1).pat 8x8无缝砖.pat Z形砖.pat 丁字砖面1.pat 丁字砖面2.pat 三联蜂窝.pat 三角形拼铺.pat 不能通行的沼泽地.pat 乱沙.pat...

    leetcode和pat甲-prepare-for-PAT:准备PAT

    leetcode和pat甲 C++ algorithm常用函数 PAT 甲级练习 递归入门练习 递归进阶练习 Leetcode练习

Global site tag (gtag.js) - Google Analytics