这种题应该诸位处理
2015-10-08 11:03
183 查看
HDU 4588 Count The Carries
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4588
求a~b求和在二进制情况下共发生多少次进位。
1、将i转化成二进制,因为每一位只有出现多个1的时候才会产生进位。
2、所以,统计每一位1的个数即可。
3、统计1~b每一位1的个数,1~a-1中1的个数,作差即可。
(对于怎么统计1~n的每一位1的个数,数学好的应该一眼能看出,数学不好的找找规律画画就行,不难的)
View Code
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4588
求a~b求和在二进制情况下共发生多少次进位。
1、将i转化成二进制,因为每一位只有出现多个1的时候才会产生进位。
2、所以,统计每一位1的个数即可。
3、统计1~b每一位1的个数,1~a-1中1的个数,作差即可。
(对于怎么统计1~n的每一位1的个数,数学好的应该一眼能看出,数学不好的找找规律画画就行,不难的)
#include<iostream> #include<cstdio> #include<cstring> using namespace std; const int maxn = 5e4 + 10; int bit[maxn][35], a[maxn]; long long n; void change( int k, int p ){ int cnt = 0; while(p){ bit[k][cnt++] = p&1; p >>= 1; } } void input(){ scanf("%lld", &n); memset( bit, 0, sizeof(bit) ); for( int i = 1; i <= n; ++i ){ scanf("%d", &a[i]); change( i, a[i] ); } } void solve(){ long long ans1 = 0; //与运算 long long k = 1; for( int i = 0; i < 32; ++i ){ long long cnt1 = 0; long long tmp = 0; for( int j = 1; j <= n; ++j ){ while( j <= n && bit[j][i] == 1 ){ cnt1++; j++; } tmp += cnt1*(cnt1+1)/2; cnt1 = 0; } ans1 += tmp * k, k *= 2; } //printf("%lld\n", ans1); //或运算 long long ans2 = 0; k = 1; for( int i = 0; i < 32; ++i ){ long long cnt1 = 0; long long tmp = 0; for( int j = 1; j <= n; ++j ){ while( j <= n && bit[j][i] == 0 ){ cnt1++; j++; } tmp += cnt1*(cnt1+1)/2; cnt1 = 0; } ans2 += k*(n*(n+1)/2 - tmp), k *= 2; } //printf("%lld\n", ans2); //异或运算 long long ans3 = 0; k = 1; for( int i = 0; i < 32; ++i ){ int ji = 0, ou = 0, tmp = 0; long long res = 0; for( int j = 1; j <= n; ++j ){ if( bit[j][i] == 1 ){ tmp++; } if(tmp%2){ res += ou+1; ji++; }else{ res += ji; ou++; } } ans3 += res * k, k *= 2; } long long tot = n*(n+1)/2; printf(" %.6lf %.6lf %.6lf\n", ans1/(1.0*tot), ans2/(1.0*tot), ans3/(1.0*tot) ); } int main(){ int T, cas = 1; scanf("%d", &T); while(T--){ input(); printf("Case #%d:", cas++); solve(); } return 0; }
View Code
相关文章推荐
- 动态创建script在IE中缓存js文件时导致编码不正确bug
- linux 更新配置文件命令——source ~/.bashrc
- 测试要点在测试用例编写中的作用
- 堆和栈的区别
- html中cellspacing
- iOS设备相关信息获取
- Codeforces 582B Once Again...
- Android实战简易教程-第六十三枪(动画实现唱片播放界面)
- 修改项目名称
- bzoj 1013: [JSOI2008]球形空间产生器sphere
- Objective-C:禁止调用方法
- JAVA IDE IntelliJ IDEA使用简介(一)—之界面元素
- IOS第三方类 播放音频 STKAudioPlayer
- 黑马程序员---OC学习笔记之分类(Catgory)的概念及使用
- 【失败】制作CentOS镜像
- join , select ,group by ,count,sum,where
- dell服务器硬盘的状态变成外来(foreign)
- fullCalendar中文api
- JAVA设计模式之单例模式
- android 电容屏(三):驱动调试之驱动程序分析篇