题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4768
题意:有n个社团发传单,每个社团发给编号为A_i, A_i+C_i,A_i+2*C_i,…A_i+k*C_i (A_i+k*C_i<=B_i, A_i+(k+1)*C_i>B_i)的学生,求收到传单数为奇数的学生的编号和收到的传单数,题目保证最终最多只有一个为奇数。
分析:x^x=0,x^0=x,因为最终最多只有一个奇数,所以如果存在奇数的话,当所有数异或完之后的值为该奇数,如果不存在的话,异或完后值为0。然后再重头扫一遍计数就行了。
网上那个二分的方法代码还是看不懂=_=...
AC代码:

1 #include<stdio.h> 2 int a[20005],b[20005],c[20005]; 3 int main() 4 { 5 int n,i,ans,j,cnt; 6 while(scanf("%d",&n)!=EOF) 7 { 8 cnt=0; 9 ans=0; 10 for(i=0;i<n;i++) 11 { 12 scanf("%d%d%d",&a[i],&b[i],&c[i]); 13 for(j=a[i];j<=b[i];j+=c[i]) 14 ans^=j; 15 } 16 for(i=0;i<n;i++) 17 { 18 for(j=a[i];j<=b[i];j+=c[i]) 19 if(ans==j) 20 cnt++; 21 } 22 if(cnt) 23 printf("%d %d ",ans,cnt); 24 else 25 printf("DC Qiang is unhappy. "); 26 } 27 return 0; 28 }