C. Ternary XOR(进制问题+思维)Codeforces Round #629 (Div. 3)
原理链接: https://codeforces.com/contest/1328/problem/C
测试样例:
Input
4
5
22222
5
21211
1
2
9
220222021
Output
11111
11111
11000
10211
1
1
110111011
110111010
题意: 给定一个长度为3的三进制数为 x x x,其中 x x x是由 x = a ⨀ b x=a \bigodot b x=a⨀b运算得来的,其中 a a a和 b b b也为三进制数, ⨀ \bigodot ⨀这个运算符表示为每个 x i = ( a i + b i ) % 3 x_i=(a_i+b_i)\%3 xi=(ai+bi)%3。 1 ≤ i ≤ n 1\leq i\leq n 1≤i≤n。让我们求出 a a a和 b b b使得 a ⨀ b = x a\bigodot b=x a⨀b=x,同时 m a x ( a , b ) max(a,b) max(a,b)在所有可能的情况下的值应该最小。
解题思路: 我们的思路十分简单,为了尽量让a和b相差最小即可。我们遍历 x x x就行,然后我们确定遍历的时候尽量平分x的位置上的数,那么当x上位数为1时也就不能平分了,我们必须要分给一个a为0,一个b为1.那么这个时候大小就出现差异了。那么我们接下来的遍历就要弥补之间的差距,于是将x后面的全部给a,b补0即可。这样a和b的差距就会最小,也就是能够是 m a x ( a , b ) max(a,b) max(a,b)最小,所以我们关键要设一个标志变量判断是否开始出现差异。具体看代码。
AC代码:
/*
*邮箱:unique_powerhouse@qq.com
*blog:https://me.csdn.net/hzf0701
*注:文章若有任何问题请私信我或评论区留言,谢谢支持。
*
*/
#include<bits/stdc++.h> //POJ不支持
#define rep(i,a,n) for (int i=a;i<=n;i++)//i为循环变量,a为初始值,n为界限值,递增
#define per(i,a,n) for (int i=a;i>=n;i--)//i为循环变量, a为初始值,n为界限值,递减。
#define pb push_back
#define IOS ios::sync_with_stdio(false);cin.tie(0); cout.tie(0)
#define fi first
#define se second
#define mp make_pair
using namespace std;
const int inf = 0x3f3f3f3f;//无穷大
const int maxn = 5e5+4;//最大值。
typedef long long ll;
typedef long double ld;
typedef pair<ll, ll> pll;
typedef pair<int, int> pii;
//*******************************分割线,以上为自定义代码模板***************************************//
int t,n;//t组测试样例,n为长度
char s1[maxn],s2[maxn],s3[maxn];//字符串。
int main(){
//freopen("in.txt", "r", stdin);//提交的时候要注释掉
IOS;
while(cin>>t){
while(t--){
cin>>n;
cin>>s1;
int cnt=0;
int flag=false;
s2[cnt]='1';
s3[cnt++]='1';
rep(i,1,n-1){
if(s1[i]=='0'){
s2[cnt]='0';
s3[cnt++]='0';
}
else if(!flag){
if(s1[i]=='1'){
s2[cnt]='1';s3[cnt++]='0';
flag=true;
}
else{
s2[cnt]='1';s3[cnt++]='1';
}
}
else{
if(s1[i]=='1'){
s2[cnt]='0';s3[cnt++]='1';
}
else{
s2[cnt]='0';s3[cnt++]='2';
}
}
}
s2[cnt]='\0';s3[cnt]='\0';
cout<<s2<<endl;
cout<<s3<<endl;
}
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!