#P99. Communicating Problem Test 2: The wrong bit (Hard Version)

Communicating Problem Test 2: The wrong bit (Hard Version)

负责人

注意

本题有弱化版 P98

本题为通信题。

请务必严格按照提交方式进行操作!!!

题目描述

给定两个长度为 nn至多有一个字符不同的 01 串 S,TS,T

请构造两个程序 A 和 B,实现以下操作:

  1. A 读入 01 串 SS
  2. A 输出一个不大于 2201\color{red}2^{20}-1 的非负整数 XX
  3. B 读入 01 串 TT 和 A 输出的非负整数 XX
  4. B 输出 S,TS,T 之间不同的那个位置。

提交方式

程序 A 模板

程序 A 将会读入一个长度为 nn 的 01 串 SS(但不会读入 nn 的值)。该程序需要输出一个不大于 2201\color{red}2^{20}-1 的非负整数 XX,表示它传给程序 B 的信息。

#include <bits/stdc++.h>
using namespace std;
int main()
{
    string S;
    cin >> S;
    int X = 0;
    // ...
    cout << X << endl;
    return 0;
}

程序 B 模板

程序 B 将会在第一行读入一个长度为 nn 的 01 串 TT(但不会读入 nn 的值),在第二行读入程序 A 传给它的信息——一个不大于 2201\color{red}2^{20}-1 的非负整数 XX。该程序需要输出一个不大于 nn 的非负整数 DD,其含义为「S,TS,T 之间从左到右第 DD 个字符不同」。特别地,给定的两个 01 串有可能完全相同,此时请输出 00

#include <bits/stdc++.h>
using namespace std;
int main()
{
    string T;
    int X;
    cin >> T >> X;
    int D = 0;
    // ...
    cout << D << endl;
    return 0;
}

总模板

请将你已经完成的程序 A 和程序 B 粘贴到下面模板中的指定位置,然后直接提交源代码。

// Paste your Program A here

/* ATTENTION!!! THIS IS THE BARRIER!!! */

// Paste your Program B here

注意事项

  1. 请务必使用以上模板,否则后果自负!!!
  2. 严禁攻击评测程序,否则按作弊处理!!!
  3. 你提交的源代码不得超过 10001000 行,总长度不得大于 10510^5 字节。
  4. 我们编译你的代码时,所使用的编译参数为 -O2 -std=c++14
  5. 本题的时间限制为 11 秒,空间限制为 512 MB,且均对两个程序分开计算。

提示

对于 100%100\% 的数据,1n1061 \le n \le 10^6