[#590 (Div. 3)]暑期训练第三周第二天

A

你有1-6号六种模型:
在这里插入图片描述
给你一个只包含上述六种模型的图,长度为n,宽为2,问你能否通过旋转图转的一些模型,使得这些模型连成一条线从左上角到右下角。如:
在这里插入图片描述
在这里插入图片描述

思路/过程: 这个题看着挺唬人的,刚开始我就被吓住了,但其实一点都不难。1、2是一样的,3、4、5、6是一样的(因为可以旋转)。然后顺着路径模拟一遍过程就行了。
题解就不写了。

	int n;
	cin>>n;
	for(int i=0;i<n;i++)
	{
		char x;
		cin>>x;
		if(x<='2') a[i][0]=1;	//1、2都算1
		else a[i][0]=2;			//3、4、5、6都算2
	}
	for(int i=0;i<n;i++)	//第二行
	{
		char x;
		cin>>x;
		if(x<='2') a[i][1]=1;	//第一行为0,第二行为1
		else a[i][1]=2;
	}
	bool flag=true;
	int k=0;			//起点为第1行
	for(int i=0;i<n;i++)
		if(a[i][k]==2)	//路径上有2类即为换行
		{
			if(a[i][!k]==2) k=!k;	//如果只有一个第二类即为死路
			else flag=false;
		}
		
	if(k==1&&flag) puts("YES");		//终点在第二行
	else puts("NO");

B

pi(n)是一个 [i,1,2…,i-1,i+1,…,n] 序列,给你一个包含m个数的数组a[]。
pos(p,x)为x在p数组中的位置,如pos(p2(4),2)=1。
f( p )=sum| pos(p,a[i])-pos(p,a[i+1]) |。
求f(p1(n)),f(p2(n)),…,f(pn(n))。

过程: 这个题一开始我我以为是能做出来的,结果弄了一个小时,最后也只是找到了O(n2)的解法,O(n)的做法不会。导致了后面的题差点没做完。

C

你的手机上最多可以展示k个联系人的消息,最初屏幕是空的。突然你有了预知未来的能力,你知道今天你会收到n条消息,第i条信息是ID为id[i]的朋友给你发的。
如果id[i]朋友给你发了一条消息,且id[i]朋友之前发的消息在屏幕上,那么消息列表中的顺序不会发生改变。但如果id[i]朋友之前发的消息没有在屏幕上,或者之前没有发过消息,那么这个消息会出现在消息栏的顶部,之前的消息全部后移一位,原来的第k条消息就会被挤掉。
问这一天过后消息列表中消息从上到下的朋友的ID顺序是什么。

这个题也比较的简单按照它说的进行模拟就行了。这个题可能是难在题意上,我当时做的时候就被题意绕进去了,被绕了很久才出来的。

D

你有n件货物要卖,每件货物的原来的价格为a[i]。你要给所有的货物定一个新的价格,要求所有货物的价格相同,且所有货物价格的总和要大于等于所有货物原来价格的总和。问这个新的价格为多少。

水题,只需要求出所有货物原价格的平均值的上取整即可。

E

给你一个字符串s,和q组询问/指令。
指令1:输入pos和字符c,然后将s中pos位置的字符改为c。
指令2:输入l和r,然后找出s的[l,r]区间中有多少种字符。

D.Distinct Characters Queries
过程: 这个题我当时看的时候想到了是不是可以用树状数组来做(后来我看了看题解发现真的可以用树状数组来做),但我发现:树状数组我学了以后一直没用过,给忘了……(就拿这个题来复习了)

F

你的手机上最多可以展示k个联系人的消息,最初屏幕是空的。突然你有了预知未来的能力,你知道今天你会收到n条消息,第i条信息是ID为id[i]的朋友给你发的。
如果id[i]朋友给你发了一条消息,且id[i]朋友之前发的消息在屏幕上,那么消息列表中的顺序不会发生改变。但如果id[i]朋友之前发的消息没有在屏幕上,或者之前没有发过消息,那么这个消息会出现在消息栏的顶部,之前的消息全部后移一位,原来的第k条消息就会被挤掉。
问这一天过后消息列表中消息从上到下的朋友的ID顺序是什么。

C题的困难版,扩大了数据范围。
思路/过程: 这个困难版其实也不能难,加一个map来记录列表中的id就行,这样查询就变成了O(1)。然后删除操作可以直接用vector中的erase()函数。

感想

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lwz_159

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值