2013长春网赛1010 hdu 4768 Flyer

题目链接: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\n",ans,cnt);
24         else
25             printf("DC Qiang is unhappy.\n");
26     }
27     return 0;
28 }
View Code

 

转载于:https://www.cnblogs.com/frog112111/p/3347482.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值