您的位置:首页 > 其它

2013长春网赛1010 hdu 4768 Flyer

2013-09-30 16:28 295 查看
题目链接: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代码:

#include<stdio.h>
int a[20005],b[20005],c[20005];
int main()
{
int n,i,ans,j,cnt;
while(scanf("%d",&n)!=EOF)
{
cnt=0;
ans=0;
for(i=0;i<n;i++)
{
scanf("%d%d%d",&a[i],&b[i],&c[i]);
for(j=a[i];j<=b[i];j+=c[i])
ans^=j;
}
for(i=0;i<n;i++)
{
for(j=a[i];j<=b[i];j+=c[i])
if(ans==j)
cnt++;
}
if(cnt)
printf("%d %d\n",ans,cnt);
else
printf("DC Qiang is unhappy.\n");
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: