首页 > 其他分享 >AtCoder Regular Contest 151

AtCoder Regular Contest 151

时间:2022-10-17 22:24:04浏览次数:43  
标签:151 AtCoder ch Contest int res Regular ans

A

如果 \(S\) 和 \(T\) 的某一位相同,那么 \(U\) 无论怎么填都无法影响答案,为了字典序最小,一定填 \(0\)。
只考虑 \(S\) 和 \(T\) 不同的位置,假设有 \(k\) 位不同,易知 \(k\) 为奇数一定无解。
如果 \(k\) 为偶数,那么 \(U\) 数组可以视为在 \(S\) 数组上修改了 \(k/2\) 位。考虑如何修改才能让字典序最小。
一定是把 \(S\) 前面的 \(1\) 都换成 \(0\)。当然,如果 \(k/2\) 次用不完,还得被迫把后面的一些 \(0\) 改成 \(1\)。
讲的比较抽象,具体看代码。

点击查看代码
#include <bits/stdc++.h>
using namespace std;
const int N=3e5+5;
int n,s[N],t[N],ans[N];
signed main()
{
	cin>>n;
	for(int i=1;i<=n;++i)
	{
		char ch;cin>>ch;
		s[i]=ch-'0';
	}
	for(int i=1;i<=n;++i)
	{
		char ch;cin>>ch;
		t[i]=ch-'0';
	}
	int cnt=0;
	for(int i=1;i<=n;++i)
		if(s[i]!=t[i])cnt++;
	if(cnt%2==1)cout<<-1<<endl;
	else
	{
		int cur=0;
		for(int i=1;i<=n;++i)
		{
			if(s[i]==t[i])ans[i]=0;
			else //不同的地方 
			{
				if(s[i]==1)
				{
					if(cur<cnt/2)ans[i]=0,cur++;
					else ans[i]=1;
				}
				else ans[i]=0;
			}
		}
		int res=cnt/2-cur;
		if(res>0)
		{
			for(int i=n;i>=1;--i)
			{
				if(s[i]!=t[i])
				{
					if(s[i]==0&&ans[i]==0)
					{
						ans[i]=1;res--;
						if(res==0)break;
					}
				}	
			} 
		}
		for(int i=1;i<=n;++i)cout<<ans[i];
	}
	return 0;
}

标签:151,AtCoder,ch,Contest,int,res,Regular,ans
From: https://www.cnblogs.com/lnwhl/p/16800943.html

相关文章

  • AtCoder Regular Contest 150
    A考虑枚举每一个区间,考虑如何\(\mathcalO(1)\)判断。如果区间符合条件当且仅当区间内没有\(0\),区间外没有\(1\)。维护一个前缀和即可。点击查看代码#include<b......
  • atcoder ARC C 01-Game (博弈, Grundy数)
    https://atcoder.jp/contests/arc151/tasks/arc151_c题意:有1*n的的网格,有一些位置填有0和1,现在A和B进行游戏,往网格上填0/1,要保证相邻两个格子不能相同。A先手,问最后谁赢......
  • AtCoder Beginner Contest 273
    A-ARecursiveFunction签到题#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;intread(){intx=0,f=1,ch=getchar();whil......
  • ARC151C 01 Game
    ARC151C01Game前言赛时机房大佬们以及标算都用SG函数做的,而我用的是最朴素的大力分类讨论,wa了十二发才过,写下这篇题解记录我的想法,纪念一下这场比赛。题目简意\(......
  • Atcoder Educational DP Contest 部分做题记录
    G.LongestPath拓扑排序dp#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;intdp[100010],d[100010];voidsolve(){intn,m;scanf("%d......
  • [题解] Atcoder Regular Contest ARC 151 A B C D E 题解
    点我看题昨天刚打的ARC,题目质量还是不错的。A-EqualHammingDistances对于一个位置i,如果\(S_i=T_i\),那么不管\(U\)的这个位置填什么,对到\(S\)和\(T\)的海明距离增量......
  • AtCoder Beginner Contest 273 题解
    第一次AtCoder体验,不是很好。ARecursiveFunction原题链接大水题。只要会递归就会做。点击查看代码#include<cstdio>#include<iostream>#definelllonglong......
  • 代码随想录 反转字符串(LeetCode 344) ,反转字符串II(LeetCode 541),替换空格(剑指offer
    反转字符串题目编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组char[]的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用......
  • AtCoder Regular Contest 150 B Make Divisible 贪心 整除分块
    给出一个A和B想要找到一个X和Y使得\(A+X|B+Y\).同时使得X+Y最小求出X+Y的最小值。值域是\([1,10^9]\)直接枚举X不太行会被某种数据卡掉。考虑正解:先固定K另\(\frac{B......
  • AtCoder Beginner Contest 272 G - Yet Another mod M // 随机化
    题目来源:AtCoderBeginnerContest272G-YetAnothermodM题目链接:ABC272G-YetAnothermodM题意给定一个大小为\(N\),元素各不相同的数组\(A\)。求一个数字\(......