博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[题解]第十一届北航程序设计竞赛预赛——H.高中数学题
阅读量:6976 次
发布时间:2019-06-27

本文共 1245 字,大约阅读时间需要 4 分钟。

题目描述

解题思路

可以求得通项公式:an = 2n + 1,所以问题就变成等差数列求异或和,这个具体为什么对我还不能很好地解释清楚,先挖坑吧。

 

附:c++代码

1 #include 
2 #include
3 4 using namespace std; 5 6 typedef unsigned long long llt; 7 8 llt Cal(llt x, llt d, llt P, llt Num) 9 {10 llt ret = 0;11 ret += (x / P) * Num;12 x %= P;13 ret += (d / P) * Num * (Num - 1) / 2;14 d %= P;15 if (d * Num + x < P)16 return ret;17 else18 return ret + Cal((d * Num + x) % P, P, d, (d * Num + x) / P);19 }20 21 llt My_Xor(llt l, llt r, llt d)22 {23 llt Num = r - l +1;24 llt x = l * 2 + 1;25 llt ans = 0, Sum, P = 1;26 for (llt i = 1; i <= 36; i++)27 {28 Sum = Cal(x, d, P, Num);29 if (Sum & 1)30 ans += P;31 P <<= 1;32 }33 return ans;34 }35 36 int main()37 {38 //freopen("mi.in", "r", stdin);39 //freopen("H.out", "w", stdout);40 int n, i;41 llt l, r, ans;42 scanf("%d", &n);43 for(i = 1; i <= n; i++)44 {45 //scanf("%I64d%I64d", &l, &r);46 cin >> l >> r;47 ans = My_Xor(l, r, 2);48 //printf("%I64d\n", ans);49 cout << ans <
View Code

 

另一种思路

这是官方给出的题解。

转载于:https://www.cnblogs.com/CQBZOIer-zyy/p/5049460.html

你可能感兴趣的文章
使用Mono管理Coyote Linux
查看>>
公有云环境下应用程序的自动化部署与水平扩展问题
查看>>
JAVAEclipse:could not find the main class,program will exit!
查看>>
Provisioning Services 7.8 入门系列教程之十三 使用 Boot Device Management(BDM)
查看>>
Centos 6.4下MySQL备份及还原详情介绍
查看>>
sql server 表索引碎片处理
查看>>
ASP网络编程从入门到精通 下载
查看>>
集群概述及原理笔记(1)
查看>>
主动防病毒内容篇
查看>>
无准备,不编程——计算机达人成长之路(15)连载
查看>>
服务器监控--cacti中英文版安装全解
查看>>
Nginx+Tomcat实现反向代理与动静分离
查看>>
WSUS Troubleshooting guide
查看>>
在SQL中使用CRL函数示例
查看>>
ATLAS入门篇之CascadingDropDown控件编程
查看>>
《从零开始学Swift》学习笔记(Day 47)——final关键字
查看>>
linux下磁盘镜像软件DRBD的使用
查看>>
snort源码的详细分析
查看>>
揭开Annotation的面纱
查看>>
使用DPM2007备份还原Exchange2007邮箱数据库
查看>>