Codeforces Round 885 (Div. 2)|“朝闻道”知识分享大赛

给小猫咪顺毛 2023-12-31 18:01:59

这是我参加朝闻道知识分享大赛的第27篇文章.

题目:Problem - A - Codeforces

题意:Vika和她的朋友们在有n*m个房间的商场内,每一分钟,Vika移动到相邻房间中,她的朋友们在她之后移动,(每个人都必须移动)如果一分钟后Vika和她朋友在一个房间内,则Vika被捉住。问Vika能不能永远不被朋友捉到。

分析:刚开始没看懂题,以为只有一分钟,,,枚举每一个朋友的坐标,如果距离Vika的曼哈顿距离为奇数就不会被捉到,偶数就会被捉到。(因为所有情况都可以化简为在 2∗2 或 1∗2 的矩阵内,易得结论)

代码:

#include<bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef pair<int,int>PII;

#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define _cf() int _;cin>>_;while(_--)

const int N = 2e6;
const int inf = 2147483647;

void _()
{
	int n,m,k;
	cin>>n>>m>>k;
	int res=0,a,b,x,y,no=0;
	cin>>x>>y;
	for(int i=1;i<=k;i++)
	{
		cin>>a>>b;
		res=abs(a-x)+abs(b-y);
		if(res%2==0) no=1; 
	}
	if(no) cout<<"NO"<<endl;
	else cout<<"YES"<<endl;
}

int main()
{
	int t;cin>>t;
	while(t--) _();
	return 0;
}

题目:Problem - B - Codeforces

题意:一座木桥由n块不同颜色的木板组成,Vika只能踩颜色相同的木板,且有一次改变木板颜色的机会,问Vika走过这座桥跨越最大木板数的最小值。

分析:开始以为是二分,但是二分不好遍历颜色,所以直接模拟了,记录每个颜色出现的前一次位置,更新每个颜色的最大和次大跨度,处理后遍历所有颜色并更新答案即可。

代码:(寡丑)

#include<bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef pair<int,int>PII;

#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define _cf() int _;cin>>_;while(_--)

const int N = 2e5+4;
const int inf = 2147483647;
int a[N],pre[N];
int maxx[N];//最大距离
int maxn[N];//次大距离
int n,k;
void _()
{
	cin>>n>>k;
	for(int i=1;i<=k;i++) pre[i]=maxx[i]=maxn[i]=0;
	int x,gap;
	for(int i=1;i<=n;i++)
	{
		cin>>x,gap=i-pre[x];
		if(gap>maxx[x])
		{
			maxn[x]=maxx[x];
			maxx[x]=gap;
		}
		else if(gap>maxn[x]) maxn[x]=gap;
		pre[x]=i;
	}
	
	int res=inf;
	for(int i=1;i<=k;i++)
	{
		gap=n+1-pre[i];
		if(gap>maxx[i])
		{
			maxn[i]=maxx[i];
			maxx[i]=gap;
		}
		else if(gap>maxn[i]) maxn[i]=gap;
		res=min(res,max((maxx[i]-1)/2,maxn[i]-1));
	}
	// cout<<"--------- ";
	// for(int i=1;i<=k;i++)cout<<maxx[i]<<" ";cout<<endl; 
	printf("%d\n",res);
}

int main()
{
	int t;cin>>t;
	while(t--) _();
	return 0;
}

题目:Problem - C - Codeforces

题意:给两个数组,每次滚动更新,更新方式为c=abs(a-b),a=b,b=c。问a数组能不能全部更新为0.

分析:很玄学的找规律题,,,,赛时是没写出来,但是发现了三次一循环的规律。

在 的情况,更新三轮:a b a-b a-2b b,可以发现b没变,a变成了a-2b,同理 的情况

先三轮三轮地加速更新,再依次往后挪一个。普遍情况是a,b数组中每对数的更新次数模3必须相等,再处理一下特殊情况。

代码:

#include<bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef pair<int,int>PII;

#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define _cf() int _;cin>>_;while(_--)

const int N = 2e6;
const int inf = 2147483647;

void _()
{
	int n;
	cin>>n;
	vector<int> a(n+1),b(n+1);
	for(int i=1;i<=n;i++) cin>>a[i];
	for(int i=1;i<=n;i++) cin>>b[i];
	int x,y,op=-1,no=0;
	for(int i=1;i<=n;i++)
	{
		x=a[i],y=b[i];
		if(x==0&&y==0) continue;
		int v=0;
		while(x!=0)
		{
			if(x>=2*y&&y) x%=2*y;
			else if(y>=2*x&&x) y%=2*x;
			tie(x,y)=make_pair(y,abs(x-y));
			v=(v+1)%3;
		}
		if(op!=-1&&op!=v) {
			no=1;
			break;
		}
		op=v;
	}
	cout<<(no?"NO\n":"YES\n");
}

int main()
{
	int t;cin>>t;
	while(t--) _();
	return 0;
}

 

...全文
47 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

858

社区成员

发帖
与我相关
我的任务
社区描述
中南民族大学CSDN高校俱乐部聚焦校内IT技术爱好者,通过构建系统化的内容和运营体系,旨在将中南民族大学CSDN社区变成校内最大的技术交流沟通平台。
经验分享 高校 湖北省·武汉市
社区管理员
  • c_university_1575
  • WhiteGlint666
  • wzh_scuec
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

欢迎各位加入中南民族大学&&CSDN高校俱乐部社区(官方QQ群:908527260),成为CSDN高校俱乐部的成员具体步骤(必填),填写如下表单,表单链接如下:
人才储备数据库及线上礼品发放表单邀请人吴钟昊:https://ddz.red/CSDN
CSDN高校俱乐部是给大家提供技术分享交流的平台,会不定期的给大家分享CSDN方面的相关比赛以及活动或实习报名链接,希望大家一起努力加油!共同建设中南民族大学良好的技术知识分享社区。

注意:

1.社区成员不得在社区发布违反社会主义核心价值观的言论。

2.社区成员不得在社区内谈及政治敏感话题。

3.该社区为知识分享的平台,可以相互探讨、交流学习经验,尽量不在社区谈论其他无关话题。

试试用AI创作助手写篇文章吧