感谢微信平台 --- 一天一道算法题 ---- 每天多一点进步----
直接上题目了:
因为 我实在还没有理解这个算法的核心..... stupid as i am
so I can't tell anything.....
我的一些疑问 同样 附在了 我下面给出的代码中
1 /* 2 总的思路:-----都是来自 刘汝佳的算法书P58 ------ 3 用二进制的位 表示字母 1表示出现奇数次 0 表示出现偶数次 4 根据相同的两个数 xor 为0 将字符串 分成2个部分 5 首先计算前 n/2个字符串所能得的所有xor值 并将其保存到一个映射S中( xor值->前n/2个字符串中的一个子集) 6 然后 枚举后n/2个字符串所能得到的所有xor值 并每次都在S中查找 7 映射 通过stl中的map实现 --- 8 这种 方法 称为 中途相遇法 9 */ 10 11 #include <iostream> 12 #include <map> 13 #include <cstdio> 14 using namespace std; 15 16 const int size = 24; 17 map<int,int>table; 18 int bitcount( int x ) //这个函数作用 我没看懂 19 { 20 return x==0?0:bitcount(x/2)+(x&1); 21 } 22 23 int A[size]; 24 char str[1010]; 25 26 int main() 27 { 28 int n; 29 while( ~scanf("%d",&n) &&n ) 30 { 31 for( int i = 0 ; i<n ; i++ ) 32 { 33 scanf( "%s",str ); 34 A[i] = 0; 35 for( int j = 0 ; str[j]!='