BJTU A Simple Problem

题面描述

求 0~n 中有多少个整数 k 满足 (2 * k) XOR (3 * k) == k, 其中 XOR 为异或操作。

输入数据

输入数据的第一行为一个正整数 T(T<=30) ,表示测试数据的组数。

接下来的 T 行中,每行为一组测试数据,包含一个正整数 n(n<=1000000000) 。

输出数据

对每一组输入数据,输出一行结果 ”Case #id: M” ,表示第 id 组数据的结果是 M , id 从 1 开始。

样例输入

 

5
0
1
2
3
4

 

样例输出

 

Case #1: 1
Case #2: 2
Case #3: 3
Case #4: 3
Case #5: 4

 

 

解题思路

       XOR异或运算10000000000(9个0),如果直接枚举,时间肯定会超时,就想到了暴力打表,分阶段AC。基于我们的代码结果是正确的,不妨我们分成10个部分。

int XorForm[51] = {1 , 514229 , 832040 , 1028458 , 1346269 , 1346269 ,
                   1664080 ,  2056916 , 2178309 , 2178309 ,  2178309} ;
// 打表长度  0,1(8个0),2(8个0),3(8个0),4(8个0),5(8个0),
//            6(8个0),7(8个0),8(8个0),9(8个0),10(8个0)

           即使是这样,代码也会超时。那就再细分一下,我是每个区间细分为5个。如果想要时间更快,建议每个区间分成10个。

// 打表长度  0,1(8个0),2(8个0),3(8个0),4(8个0),5(8个0),6(8个0),7(8个0),8(8个0),9(8个0),10(8个0)
int XorForm[51] = {
    1 , 167761 , 271443 , 317811 , 439204 , 514229 ,//0-2-4-6-8-10
    514229 , 589254 , 710647 , 832040 , 832040 ,//12-14-16-18-20
    832040 , 832040 , 832040 , 953433 , 1028458 ,//22-24-26-28-30
    1149851 , 1202984 , 1346269 , 1346269 , 1346269 ,//32-34-36-38-40
    1346269 , 1346269 , 1346269 , 1346269 , 1346269 ,//42-44-46-48-50
    1346269 , 1392637 , 1542687 , 1640214 , 1664080 ,//52-54-56-58-60
    1785473 , 1860498 , 1860498 , 1946469 , 2056916 ,//62-64-66-68-70
    2178309 , 2178309 , 2178309 , 2178309 , 2178309 ,//72-74-76-78-80
    2178309 , 2178309 , 2178309 , 2178309 , 2178309 ,//82-84-86-88-90
    2178309 , 2178309 , 2178309 , 2178309 , 2178309 ,//92-94-96-98-100
} ;

 

 

完整程序代码如下

 

 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值