Atcoder Regular Round #151 A题 Equal Hamming Distances 题解

题意:

定义 Hamming 距离为两个 01 字符串中下标相同且字符不同的字符对的数量,问是否可以构造一个字符串 u 满足 Hamming(s,u)=Hamming(t,u)

思路:

如果 Hamming(s,t) 满足 Hamming(s,t)mod2=1,那么 Hamming(s,t) 就是无解的。

否则,如果 siti,那么设 c=Hamming(s,t)/2,只要 st 和构造串的 Hamming 距离 c,那么就填 1,否则填 0

然后直接构造即可。时间复杂度 O(n)

#include <bits/stdc++.h>

using namespace std;

int Hamming(string &s, string &t)
{
  int cnt = 0;
  for (int i = 0; i < s.size(); i ++)
    if (s[i] != t[i])
      cnt ++;
  return cnt;
}

signed main()
{
  int n;
  cin >> n;
  string s, t;
  cin >> s >> t;
  int cntst = Hamming(s, t);
  if (cntst & 1)
    cout << "-1\n";
  else
  {
    int cf = cntst >> 1;
    int cnt0 = 0, cnt1 = 0;
    string u;
    for (int i = 0; i < s.size(); i ++)
      if (s[i] == t[i])
        u += '0';
      else // s[i] != t[i]
      {
        if (s[i] == '0' && cnt0 < cf)
        {
          u += '0';
          if (s[i] == '0')
            cnt0 ++;
          else
            cnt1 ++;
        }
        else if (s[i] == '1' && cnt1 < cf)
        {
          u += '0';
          if (s[i] == '0')
            cnt0 ++;
          else
            cnt1 ++;
        }
        else
        {
          u += '1';
          if (s[i] == '0')
            cnt1 ++;
          else
            cnt0 ++;
        }
      }
    cout << u << '\n';
  }
  return 0;
}

posted @   yhbqwq  阅读(31)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示