CCF-CSP 201912

本来可以拿300多分的,第四题的分就这么白扔了。。刚开始看了一眼感觉很难就放弃了,一直在扣第五题,还是没有做出来。最后收卷前一看,第四题真简单,就是没时间了。

第三题测试过了前六个测试点,只有40分。。。带括号的实在写不下去了。凌晨3点多赶去机场,下飞机坐车做到中午,下午考试,脑阔疼╯▂╰

再给我一天时间我能拿400分

在这里插入图片描述

201912-1 报数

时间限制: 1.0s
内存限制: 512.0MB

【题目描述】

甲乙丙丁决定玩一个报数的游戏来打发时间。游戏规则为四个人从1开始轮流进行报数,但如果需要报出的数是7的倍数或含有数字7则直接跳过。
此外大家约定,在总共报出了n个数后(不计入被跳过的数)游戏结束。现在需要你来帮忙统计,游戏过程中每个人各自跳过了几次。

【输入格式】

从标准输入读入数据。
输入仅一行,包含一个正整数n,表示报出了多少个数后游戏结束。

【输出格式】

输出到标准输出。
输出共四行,每行一个整数,依次表示甲乙丙丁四人在游戏过程中跳过的次数。

【样例1输入】

20

【样例1输出】

2
1
1
0

【样例1解释】

报数过程为:
甲:1,乙:2,丙:3,丁:4
甲:5,乙:6,丙:跳过,丁:8
甲:9,乙:10,丙:11,丁:12
甲:13,乙:跳过,丙:15,丁:16
甲:跳过,乙:18,:19,丁:20
甲:跳过,乙:22,丙:23,丁:24
在丁报出24后,四个人总计报出了20个数,游戏结束。

【样例2输入】

66

【样例2输出】

7
5
11
5

【提示】

测试点1、2、3、4和5,保证n<=10^2;
测试点6、7、8、9和10,保证n<=666。

参考代码:

#include <iostream>
using namespace std;
int main()
{
	int n,a=0,b=0,c=0,d=0,p=0;
	cin>>n;
	for(int i=1;;i++)
	{
		int f=0;
		if(i%7==0)f=1;
		else
		{
			int x=i;
			while(x)
			{
				if(x%10==7)
				{
					f=1;
					break;
				}
				x/=10;
			}
		}
		if(f==1)
		{
			if(i%4==1)a++;
			if(i%4==2)b++;
			if(i%4==3)c++;
			if(i%4==0)d++;
		}
		else
		{
			p++;
			if(p==n)break;
		}
	}
	cout<<a<<endl<<b<<endl<<c<<endl<<d<<endl;
	return 0;
}

201912-2 垃圾回收站

时间限制: 1.0s
内存限制: 512.0MB

【题目描述】

开学了,可是校园里堆积了不少垃圾杂物。
热心的同学们纷纷自发前来清理,为学校注入正能量~
通过无人机航拍我们已经知晓了n处尚待清理的垃圾位置,其中第i(1<=i<=n)处的坐标为(x,y),保证所有的坐标均为整数。
我们希望在垃圾集中的地方建立些回收站。具体来说,对于一个位置(x, y)是否适合建立回收站,我们主要考虑以下几点:
(x, y)必须是整数坐标,且该处存在垃圾:上下左右四个邻居位置,即(x, y+1),(x, y-1),(x+1, y)和(x-1, y)处,必须全部存在垃圾:进一步地,我们会对满足上述两个条件的选址进行评分,分数为不大于4的自然数,表示在(x±1,y±1)四个对角位置中有几处存在垃圾。
现在,请你统计一下每种得分的选址个数。

【输入格式】

从标准输入读入数据。输入总共有n+1行。
第1行包含一个正整数n,表示已查明的垃圾点个数。
第1+i行(1<=i<=n)包含由一个空格分隔的两个整数xi和yi,表示第i处垃圾的坐标。
保证输入的n个坐标互不相同。

【输出格式】

输出到标准输出。
输出共五行,每行一个整数,依次表示得分为0、1、2、3和4的回收站选址个数。

【样例1输入】

7
1 2
2 1
0 0
1 1
1 0
2 0
0 1

【样例1输出】

0
0
1
0
0

【样例1解释】

在这里插入图片描述
如图所示,仅有(1,1)可选为回收站地址,评分为2.

【样例2输入】

2
0 0
-100000 10

【样例2输出】

0
0
0
0
0

【样例2解释】

不存在可选地址。

【样例3输入】

11
9 10
10 10
11 10
12 10
13 10
11 9
11 8
12 9
10 9
10 11
12 11

【样例3输出】

0
2
1
0
0

【样例3解释】

测试点1和2,保证对于任意的i皆满足0<=xi, yi<=2;
测试点3、4和5,保证对于任意的i皆满足0<=xi, yi<= 500;
测试点6、7和8,保证对于任意的i皆满足0<=xi, yi<= 10^9;
测试点9和10,保证对于任意的i皆满足|xi|, |yi|<=10^9,即坐标可以是负数。
所有的测试点保证1<=n<=10^3。

参考代码:

#include <iostream>
using namespace std;
struct s{
	int x,y;
};
s s[1001];
int a[5];
int main()
{
	int n;
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>s[i].x>>s[i].y;
	}
	for(int i=0;i<n;i++)
	{
		int num1=0,num2=0;
		for(int j=0;j<n;j++)
		{
			if(s[i].x==s[j].x&&s[i].y+1==s[j].y)num1++;
			if(s[i].x==s[j].x&&s[i].y-1==s[j].y)num1++;
			if(s[i].x+1==s[j].x&&s[i].y==s[j].y)num1++;
			if(s[i].x-1==s[j].x&&s[i].y==s[j].y)num1++;
			if(s[i].x-1==s[j].x&&s[i].y-1==s[j].y)num2++;
			if(s[i].x-1==s[j].x&&s[i].y+1==s[j].y)num2++;
			if(s[i].x+1==s[j].x&&s[i].y-1==s[j].y)num2++;
			if(s[i].x+1==s[j].x&&s[i].y+1==s[j].y)num2++;
		}
		if(num1==4)
		{
			a[num2]++;
		}
	}
	for(int i=0;i<=4;i++)
	{
		cout<<a[i]<<endl;
	}
	return 0;
}

201912-3 化学方程式

时间限制: 1.0s
内存限制: 512.0MB

【题目描述】

化学方程式,也称为化学反应方程式,是用化学式表示化学反应的式子。给出一组化学方程式,请你编写程序判断每个方程式是否配平(也就是方程式中等号左右两边的元素种类和对应的原子个数是否相同)。
本题给出的化学方程式由大小写字母、数字和符号(包括等号=、加号+、左圆括号和右圆括号)组成,不会出现其他字符(包括空白字符,如空格、制表符等),化学方程式的格式与化学课本中的形式基本相同(化学式中表示元素原子个数的下标用正常文本,如H2O写成H2O),用自然语言描述如下:

  • 化学方程式由左右两个表达式组成,中间用一个等号三连接,如2H2+O2=2H2O;
  • 表达式由若干部分组成,每部分由系数和化学式构成,部分之间用加号+连接,如2H2+O2、2H2O;
  • 系数是整数或空串,如为空串表示系数为1;
  • 整数由一个或多个数字构成;
  • 化学式由若干部分组成,每部分由项和系数构成,部分之间直接连接,如H2O、CO2、Ca(OH)2、Ba3(PO4)2;
  • 项是元素或用左右圆括号括起来的化学式,如H、Ca、(OH)、(P04);
  • 元素可以是一个大写字母,也可以是一个大写字母跟着一个小写字母,如H、O、Ca。

【输入格式】

从标准输入读入数据。
输入的第一行包含一个正整数n,表示输入的化学方程式个数。
接下来n行,每行是一个符合定义的化学方程式。

【输出格式】

输出到标准输出。
输出共n行,每行是一个大写字母Y或N,回答输入中相应的化学方程式是否配平。

【样例1输入】

11
H2+O2=H2O
2H2+O2=2H2O
H2+Cl2=2NaCl
H2+Cl2=2HCl
CH4+2O2=CO2+2H2O
CaCl2+2AgNO3=Ca(NO3)2+2AgCl
3Ba(OH)2+2H3PO4=6H2O+Ba3(PO4)2
3Ba(OH)2+2H3PO4=Ba3(PO4)2+6H2O
4Zn+10HNO3=4Zn(NO3)2+NH4NO3+3H2O
4Au+8NaCN+2H2O+O2=4Na(Au(CN)2)+4NaOH
Cu+As=Cs+Au

【样例1输出】

N
Y
N
Y
Y
Y
Y
Y
Y
Y
N

【样例1解释】

1<=n<=100
输入的化学方程式都是符合题目中给出的定义的,且长度不超过1000
系数不会有前导零,也不会有为零的系数化学方程式的任何一边,其中任何一种元素的原子总个数都不超过10^9
在这里插入图片描述

201912-4 区块链

时间限制: 10.0s
内存限制: 512.0MB

【题目描述】

区块链涉及密码学、哈希算法、拜占庭问题、共识算法、故障模型、网络模型等诸多知识,也在金融等领域有广泛的应用。本题中,我们需要实现一个简单的区块链系统。
在一个分布式网络中,有n个节点通过m条边相连,节点编号从1至n。每个节点初始化都有一个相同的“创世块”,链长都为1,每个节点在整个过程中都需要维护一条主链,任何操作都只在主链上进行。在整个系统中产生的每个新块都有唯一的整数编号,创始块的编号为0,其余块的编号都为正整数。当某个节点的链更新时,会将它的主链发送给它相邻的节点(邻居);而当节点收到链时,决定是否更新自己的主链下列情况可能会导致某个节点的链更新:
·某个节点接收到邻居发送过来的链,与当前自己的主链进行比较:如果接收到的链更长,则将其作为自己的主链;如果收到的链长度与自身主链相同,且最后一块编号更小,则将其作为自己的主链
如果接收到的链更短,则直接忽略该链。
·某个节点产生一个新块,将新块放在主链的尾部。
假设网络带宽足够大,每个节点状态更新后,会立刻将自己的主链同时发送给所有邻居。每个节点在每个时刻总是先接收链,再产生新块(注意这与实际的区块链工作方式不相同),每个节点发送、接收、产生块不消耗时间,只有在网络中传输链会消耗时间。不过因为一些故障,这个网络可能会出现“分区”的情况,即出现多个子网络,不同子网络的节点无法互相收发消息
在计算机中常用逻辑时钟来定义“时刻”,逻辑时钟初始时间为0,以单位1递增。任意节点传输一条链到其邻居所花费的时间相同,都为1。现在已知整个网络的结构以及每个节点产生新块的时间,需要查询特定时刻某个节点的主链。

【输入格式】

从标准输入读入数据。
保证题中所有输入均为整数,并且所有整数绝对值不大于10^9。
第一行两个正整数分别为n,m,分别表示网络的n个节点和m条边。
接下来m行,每行2个正整数ui,vi,(1<=i<=m),表示网络中节点ui和节点vi,具有(双向)连接。
接下来一行两个正整数t,k,分别表示每次传输延时,和操作(产生块或查询)的数量。
接下来k行,每行2或3个正整数:
如果是三个数a,b,c,表示节点a在b,时刻产生了一个编号为ci的块。保证bi<=bi+1(1<=i<=k)。
如果是两个数ai,bi,表示查询节点ai处理完bi时刻及以前的所有操作后的主链。保证对于同一时刻,任何查询在输入文件中都出现在当前时刻所有的新块被产生之后。

【输出格式】

输出到标准输出。
依次输出若干行,分别对应每一次查询。
每行第一个正整数L表示主链的长度,接下来L个数表示主链每个块的编号。从链头(一定为0)到链尾依次输出。

【样例1输入】

5 10
1 2
1 3
1 4
1 5
2 3
2 4
2 5
3 4
3 5
4 5
1 27
1 1 1
2 1 2
3 1 3
4 1 4
5 1 5
1 1
2 1
3 1
4 1
5 1
1 2
2 2
3 2
4 2
5 2
1 10 10
2 11 9
1 11
2 11
3 11
4 11
5 11
1 12
2 12
3 12
4 12
5 12

【样例1输出】

2 0 1
2 0 2
2 0 3
2 0 4
2 0 5
2 0 1
2 0 1
2 0 1
2 0 1
2 0 1
3 0 1 10
4 0 1 10 9
3 0 1 10
3 0 1 10
3 0 1 10
4 0 1 10 9
4 0 1 10 9
4 0 1 10 9
4 0 1 10 9
4 0 1 10 9

【样例1解释】

网络中的节点与连接关系形成一张完全图。在时刻1时,所有节点都产生一个块,所以查询结果主链长度都为2,主链更新后,将自己的主链发给所有邻居。
因为传输时间为1,所以在时刻2时,所有节点都收到其他节点发来的主链并更新,更新后发送新的主链给邻居。此时查询所有节点,主链都为01。
节点1在时刻10产生了新的块10,并发送给邻居。所有邻居在时刻11时接收到节点1发送的块10,同时,节点2在时刻11产生了新块11,所以,时刻11时的节点2主链长为4,其余节点主链长为3,所有发生更新的节点在时刻11时向邻居发送自己的主链。
所以在时刻12时,所有节点的主链长为4.

【样例2输入】

15 13
1 2
2 3
3 4
4 5
1 6
6 7
7 8
8 9
1 10
10 11
11 12
12 13
14 15
6 28
1 1 1
1 2 2
1 6
2 7
13 7
9 7
5 7
3 14
8 14
5 14
11 14
9 25
5 25
13 25
9 29 3
5 29 4
13 29 5
1 53
2 59 6
2 59
1 1000
3 1000
8 1000
9 1000
10 1000
13 1000
14 1000
15 1000

【样例2输出】

3 0 1 2
2 0 1
1 0
1 0
1 0
3 0 1 2
1 0
1 0
3 0 1 2
2 0 1
2 0 1
2 0 1
4 0 1 2 3
5 0 1 2 3 6
5 0 1 2 3 6
5 0 1 2 3 6
5 0 1 2 3 6
5 0 1 2 3 6
5 0 1 2 3 6
5 0 1 2 3 6
1 0
1 0

【提示】

在这里插入图片描述

201912-5 魔数

时间限制: 5.0s
内存限制: 1.0GB

【题目描述】

“魔数”是指代码中出现但没有解释的数字常量。即使代码是你亲手写下的,很可能在几个月以后你也不记得这些魔数的意义了。而这道题中魔数的含义,就需要你自己探索了…
在本题中,我们定义:
U0 = 314882150829468584
U1= 427197303358170108
U2= 1022292690726729920
U3= 1698479428772363217
U4= 2006101093849356424
f(x)=(x mod 2009731336725594113)mod 2019
有一个长度为n的序列A,初始时所有元素依次为从1到n的正整数,即Ai=i(l<=i<=n)。
有q次查询,每次查询输入两个整数l,r(1<=l<=r<=n),你需要依次进行以下操作:
·设s=f(Al)+ f(Al+1)+…+f(Ar);
·输出s;
·设t=s mod 5;
·令Al,Al+1,…,Ar,的每个数都乘以Ut请你依次输出每一次查询的答案。

【输入格式】

从标准输入读入数据。
第一行包含两个正整数n,q
接下来q行,每行输入两个正整数l,r。

【输出格式】

输出到标准输出。
依次输出若干行,分别对应每一次查询。

【样例1输入】

4 4
1 3
3 4
3 3
1 3

【样例1输出】

6
1105
1735
4744

【样例2输入】

100 100
45 74
38 50
7 45
42 62
83 100
50 51
8 11
93 98
64 70
15 87
30 87
13 79
14 81
18 79
70 88
25 39
13 57
55 85
80 92
83 90
54 75
1 61
17 42
25 49
39 77
32 45
83 87
30 47
59 84
25 50
1 82
21 45
72 96
3 85
16 64
52 92
28 29
84 88
26 93
10 67
27 76
57 62
43 69
63 66
5 59
9 46
49 53
35 50
3 19
23 62
38 73
17 68
34 83
42 91
13 92
19 62
17 70
18 75
95 99
35 90
81 91
59 63
5 90
22 87
51 88
25 61
56 91
50 78
11 60
11 18
27 45
57 82
16 54
3 94
33 56
9 71
68 88
24 36
7 64
48 85
58 76
20 43
9 90
24 27
71 97
25 95
73 97
55 83
22 43
53 55
68 88
12 44
25 87
14 46
34 56
15 35
7 80
46 87
23 71
88 93

【样例2输出】

1785
5741
10423
24915
1647
2154
1872
8559
12936
60048
52916
79974
61897
50541
16819
15646
48044
30156
14581
6906
17346
45885
25217
29837
44539
12602
5964
16894
23972
30665
64047
28029
26086
89745
49102
40236
2297
6040
64456
57625
48151
8311
27574
4166
52887
37703
4922
17603
17729
35771
35915
52458
54055
44140
70298
39690
49407
48808
4775
55131
9378
2839
75644
58663
40660
29344
38759
31862
51760
7924
22539
22003
31095
86980
25718
61094
18995
13703
56434
35626
18678
22776
82576
3233
24072
76470
23887
28161
26150
2017
19769
31420
63547
31533
24513
20199
62729
39286
43276
6109

【提示】

在这里插入图片描述
所有最终测试数据的生成方式为:
按照上表指定n,q
对于每次查询,l,r均在合法范围内独立均匀随机确定。

发布了73 篇原创文章 · 获赞 26 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/l503301397/article/details/103572256