Codeforces LATOKEN Round 1 (Div. 1 + Div. 2)题解

比赛链接

A - Colour the Flag

有一个n*m矩阵
要将空白格子涂成红或者白
使得相邻两个格子颜色不一样
只要有一个涂上颜色则可确定最终的涂色结果
绝了 这题怎么代码量更大

int n,m;
char s[55],c[2];
bool ju;
void solve()
{
	sdd(n,m);
	c[0]='A'; 
	ju=0;
	rep(i,1,n)
	{
		sc(s+1);
		if(ju)continue;
		rep(j,1,m)
		{
			if(s[j]=='.')continue;
			int pos=(i+j)&1;
			if(c[0]=='A')//前面没有已涂色的 
			{
				c[1]='R';c[0]='W';
				if(pos&&s[j]=='W'||!pos&&s[j]=='R')
				c[1]='W',c[0]='R';
			}
			else
			{
				if(c[pos]!=s[j])ju=1;
			}
		}
	}
	if(ju)puts("NO");
	else
	{
		puts("YES");
		if(c[0]=='A')c[0]='R',c[1]='W';
		rep(i,1,n)
		{
			rep(j,1,m)
			{
				int pos=(i+j)&1;
				printf("%c",c[pos]);
			}
			puts("");
		}
	} 
}

B. Histogram Ugliness

我可以,陪你去看星星~
将一个直方图的某一列削掉几个
结果为直方图左右边边的数目+操作次数
如果左右的数都比当前数小,就可以将这个值减去h[i]-max(h[i-1],h[i+1])
为什么错了呢
没毛病呀
还好没打。。不然要被气死了哈
!!!h[n+1]的值没赋0
我是傻子qwq

int n,h[maxn];
ll ans;
void solve()
{
	sd(n);ans=0;
	rep(i,1,n)sd(h[i]),ans+=abs(h[i]-h[i-1]);
	ans+=h[n];
	h[n+1]=0;
	rep(i,1,n)
	{
		if(h[i]>h[i-1]&&h[i]>h[i+1])ans-=h[i]-max(h[i-1],h[i+1]);
	}
	plld(ans);
}

C. Little Alawn’s Puzzle

一个2*n的矩阵
每一行都是n的全排列
要同一行同一列的数都不一样
通过交换同一列的两个数实现
问能够得到多少种满足条件的矩阵
那就是这些数构成一个一个的环
答案就是kpow(2,cnt):cnt是环的个数
如果存在环的大小为1的话答案就是0

int n,a[maxn],b[maxn],pos[maxn],cnt;
bool vis[maxn];
int kpow(int a,int b)
{
	int ans=1;
	while(b)
	{
		if(b&1)ans=1ll*ans*a%mod;
		a=1ll*a*a%mod;
		b>>=1;
	}
	return ans;
}
void solve()
{
	sd(n);cnt=0;
	rep(i,1,n)sd(a[i]),vis[i]=0,pos[a[i]]=i;
	rep(i,1,n)sd(b[i]);
	rep(i,1,n)
	{
		if(vis[i])continue;
		if(a[i]==b[i])
		{
			puts("0");
			return;
		}
		cnt++;
		int las=b[i];
		while(las!=a[i])
		{
			vis[pos[las]]=1;
			las=b[pos[las]];
		}
	}
	pd(kpow(2,cnt));
}

D. Lost Tree

有n个点的树,让你猜哪些是边
选择一个点r,可以得到其它点到r的最短距离
可以询问n/2次!!!向上取整!!!
那就是间隔一层询问一次
看以1为根结点时,奇数层的个数与偶数层个数的大小

int n,r,x,a[maxn];
int cnt1,cnt2;
bool is[maxn][maxn];
void solve()
{
	sd(n);
	printf("? 1\n");fflush(stdout);
	cnt2=-1;
	rep(i,1,n)
	{
		sd(a[i]);
		if(a[i]&1)cnt1++;
		else cnt2++;
		if(a[i]==1)is[1][i]=is[i][1]=1;
	}
	int ju=(cnt1>=cnt2);
	rep(i,2,n)
	{
		if((a[i]&1)==ju)continue;
		printf("? %d\n",i);fflush(stdout);
		rep(j,1,n)
		{
			sd(x);
			if(x==1)is[i][j]=is[j][i]=1;
		}
	}
	puts("!");
	rep(i,1,n)rep(j,i+1,n)if(is[i][j])pdd(i,j);
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,Codeforces Round 511 (Div. 1)是一个比赛的名称。然而,引用内容中没有提供与这个比赛相关的具体信息或问题。因此,我无法回答关于Codeforces Round 511 (Div. 1)的问题。如果您有关于这个比赛的具体问题,请提供更多的信息,我将尽力回答。 #### 引用[.reference_title] - *1* [Codeforces Round 860 (Div. 2)题解](https://blog.csdn.net/qq_60653991/article/details/129802687)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Codeforces Round 867 (Div. 3)(A题到E题)](https://blog.csdn.net/wdgkd/article/details/130370975)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Codeforces Round 872 (Div. 2)(前三道](https://blog.csdn.net/qq_68286180/article/details/130570952)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值