翻译
给出\(2\)个二进制的串,可以交换第一个串的\(2\)个位置,求有多少种交换可以让交换后的第一个串与第二个串异或结果与之前的不同。
思路
怎么是数论题啊。
摘自百度百科:如果\(a\)、\(b\)两个值不相同,则异或结果为\(1\)。如果\(a\)、\(b\)两个值相同,异或结果为\(0\)。那么就简单了,不同的情况会有以下几种:
- \(00\)与\(01\)
- \(00\)与\(11\)
- \(10\)与\(01\)
然鹅\(00\)与\(11\)和\(11\)与\(00\)相等所以不会不同,于是根据乘法原理相乘即可。
Code
#include<bits/stdc++.h>
using namespace std;
long long n,a,b,c,d;
string s1,s2;
int main()
{
cin>>n>>s1>>s2;
for(int i=0;i<n;i++)
{
if(s1[i]=='0'&&s2[i]=='0') a++;
if(s1[i]=='0'&&s2[i]=='1') b++;
if(s1[i]=='1'&&s2[i]=='0') c++;
if(s1[i]=='1'&&s2[i]=='1') d++;
}
cout<<a*c+a*d+c*b<<endl;//乘法原理
return 0;
}
原文地址:https://www.cnblogs.com/lyfoi/p/9485060.html
时间: 2024-10-11 03:23:47