位运算 - 异或求和

简介:  异或求和 Problem's Link:  http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1254   Mean:  Description 给你2个区间[A,B]和[C,D],现在只要求你求出区间[A,B]和[C,D]内任意2个整数异或后的和,因为答案可能会很大,你只需将结果%mod即可。

 异或求和

Problem's Link:  http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1254


 

Mean: 

Description
给你2个区间[A,B]和[C,D],现在只要求你求出区间[A,B]和[C,D]内任意2个整数异或后的和,因为答案可能会很大,你只需将结果%mod即可。

For(i:A→B)
      For(j:C→D)
           Sum += (i^j);

Input
输入第一行为T(T<=15),表示测试的数据组数,第2行到T+1行,每行5个数字,分别为A,B,C,D,mod.
(1<=A,B,C,D<2^31,A<=B,C<=D,1<=mod& lt;=1,000,000,007),即为上述的数值。 Output 输出有T行,每行有一个数字,代表题述的答案(即Sum % mod)。 Sample Input 3 5 11 9 12 43 9 12 5 11 83 1 1 2 2 3 Sample Output 18 24 0

 

analyse:

看到这么大的输入,再看看时限是500ms,开始有点摸不着头脑,看来只能用log(n)的方法来做了。

典型的位运算题目。

首先我们求出[A,B]区间中所有数各个位上1的个数。比如[1~8]就是1,4,4,4;

怎么求呢?

我们可以打表找一下规律:

1: 0001

2: 0010

3: 0011

4: 0100

5: 0101

6: 0110

7: 0111

8: 1000

9: 1001

.....

我们会发现,[1,n]中第k位总共1的个数就是:n/(k<<1) *(k<<1 /2 )。或者说:符合 x mod 2^k >=2^(k-1) 的 x 第k位就是1。

额,这个要自己去找规律。

要求[A~B]区间内各位上1的个数,只需要B1[i]-A1[i]就行。

同理,我们可以求出[C~D]区间上各位1的个数。

剩下的就是怎么求和了。

求和比较简单:

区间【A,B】第k位为1的个数乘以区间【C,D】第k位为0的个数+区间【A,B】第k位为0的个数乘以区间【C,D】第k位为1的个数)*2^(k-1)。

 

Time complexity: O(logn)

 

Source code: 

/*
* this code is made by crazyacking
* Verdict: Accepted
* Submission Date: 2015-08-05-11.38
* Time: 0MS
* Memory: 137KB
*/
#include <queue>
#include <cstdio>
#include <set>
#include <string>
#include <stack>
#include <cmath>
#include <climits>
#include <map>
#include <cstdlib>
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#define  LL long long
#define  ULL unsigned long long
using namespace std;

void get1( LL n , LL arr []) { /**< 求1~n所有数各个位上1的个数之和 */
      for( int i = 1; i < 32; ++ i) arr [ i ] = 0;
      for( LL i = 1 , f = 2 ,b = 1; b <=n; ++ i , f <<= 1 ,b <<= 1) {
            arr [ i ] =(n / f) *( f / 2); /**< 对于每一位,1~n可分为n/t组(t是每组的01数量),其中每组有t/2个是1 */
            if(n % f >=b) arr [ i ] +=(n % f -b + 1); /**< 加上余数部分 */
      }
}

int main() {
      ios_base :: sync_with_stdio( false);
      cin . tie( 0);
      LL n , t;
      cin >> t;
      while( t --) {
            LL A ,B , C , D , Mod , a1 [ 32 ], b1 [ 32 ], c1 [ 32 ], d1 [ 32 ];
            cin >> A >>B >> C >> D >> Mod;
            get1( A - 1 , a1); get1(B , b1); get1( C - 1 , c1); get1( D , d1);
            LL ab1 [ 32 ], ab0 [ 32 ], cd1 [ 32 ], cd0 [ 32 ];
            for( int i = 1; i < 32; ++ i) ab1 [ i ] = b1 [ i ] - a1 [ i ], cd1 [ i ] = d1 [ i ] - c1 [ i ];
            int l1 =B - A + 1 , l2 = D - C + 1;
            for( int i = 1; i < 32; ++ i) ab0 [ i ] = l1 - ab1 [ i ], cd0 [ i ] = l2 - cd1 [ i ];
            LL sum = 0 , base = 1;
            for( int i = 1; i < 32; ++ i)
                  sum =( sum +( base <<( i - 1)) % Mod *( ab0 [ i ] % Mod * cd1 [ i ] % Mod + ab1 [ i ] % Mod * cd0 [ i ] % Mod) % Mod) % Mod;
            cout << sum << endl;
      }
      return 0;
}
/*

*/

 

目录
相关文章
|
5月前
|
人工智能 JSON 搜索推荐
PowerToys 功能解析:窗口布局、快速启动与更多实用特性,微软官方软件PowerToys增强工具箱,27种功能介绍
Microsoft PowerToys 是一组实用工具,旨在帮助高级用户调整和优化 Windows 体验以提升工作效率。其功能包括:FancyZones(自定义窗口布局)、PowerToys Run(快速启动应用与命令)、Keyboard Manager(键盘按键重映射)、Shortcut Guide(快捷键指南)、文件资源管理器预览面板、颜色拾取器、图像大小调整器、批量重命名工具等。此外还提供 Always On Top、鼠标实用工具、屏幕标尺、文本提取器等功能,满足多样化需求。通过这些工具,用户可实现高效多任务处理、个性化操作及便捷的系统管理。
735 5
|
11月前
|
机器学习/深度学习 人工智能 算法
UCLA、MIT数学家推翻39年经典数学猜想!AI证明卡在99.99%,人类最终证伪
近日,加州大学洛杉矶分校和麻省理工学院的数学家团队成功推翻了存在39年的“上下铺猜想”(Bunkbed Conjecture),该猜想由1985年提出,涉及图论中顶点路径问题。尽管AI在研究中发挥了重要作用,但最终未能完成证明。人类数学家通过深入分析与创新思维,找到了推翻猜想的关键证据,展示了人类智慧在数学证明中的不可替代性。成果发表于arXiv,引发了关于AI在数学领域作用的广泛讨论。
354 89
|
弹性计算 小程序 关系型数据库
24.8|超值超省,开发者轻创业算力补贴申请教程
阿里云推出一系列优惠活动,助力企业和开发者高效上云。核心优惠包括:“99计划”提供超低价服务器资源,老用户也可享受;5亿算力补贴与满减优惠降低上云成本;免费试用覆盖多种产品;创业者计划提供高额抵扣金;多款产品组合满足不同需求。学生更可专享300元补贴。此外,还介绍了开发者如何利用低成本云资源通过广告变现,包括不同广告计费模式及成功案例分析。这些优惠和服务有助于企业快速成长与数字化转型。
284 2
24.8|超值超省,开发者轻创业算力补贴申请教程
|
存储 人工智能 安全
区块链和人工智能的关系以及经典案例
区块链和人工智能的关系以及经典案例
2408 0
|
人工智能 API 开发者
阿里云CTO周靖人:通义开源模型下载量破2000万,百炼实现150%增长!
阿里云CTO周靖人:通义开源模型下载量破2000万,百炼实现150%增长!
1266 1
|
文字识别 JavaScript Java
百度OCR识别图片文字,解决image format error错误
百度OCR识别图片文字,解决image format error错误
768 0
|
消息中间件 存储 API
iOS小技能:队列管理推送通知,解决收款到账并发语音播报问题。
需求:收款到账语音提醒功能 NSE是比Voip更优雅的解决方案,完成迁移后,总体代码量也比Voip方案少了不少。
488 0
iOS小技能:队列管理推送通知,解决收款到账并发语音播报问题。
|
算法 知识图谱
HGAT:假新闻检测的分层图注意力网络
HGAT:假新闻检测的分层图注意力网络
495 0
HGAT:假新闻检测的分层图注意力网络
|
机器学习/深度学习 弹性计算 编解码
小白选择阿里云服务器配置教程CPU/内存/带宽/系统盘选择攻略
小白选择阿里云服务器配置教程CPU/内存/带宽/系统盘选择攻略
1527 0
小白选择阿里云服务器配置教程CPU/内存/带宽/系统盘选择攻略
|
机器学习/深度学习 人工智能 分布式计算
Analytics Zoo,一个集合主流框架PyTorch和Tensorflow的神奇动物园
最近旷视「天元」、华为「MindSpore」纷纷重磅开源。对此,技术大牛英特尔大数据技术全球CTO戴金权坦言,Intel的框架与华为、旷视并非是互相竞争关系。那么有了主流深度学习框架PyTorch和TensorFlow,为什么还要Big DL和Analytics Zoo呢?
576 0
Analytics Zoo,一个集合主流框架PyTorch和Tensorflow的神奇动物园