hdu - 4321 - Arcane Numbers 2 - 数位统计
来源:互联网 发布:淘宝红酒怎么那么便宜 编辑:程序博客网 时间:2024/05/17 08:35
题意:http://acm.hdu.edu.cn/showproblem.php?pid=4321
给定a和b、n,让你求b + a, b + 2 * a, .......b + n * a里面有多少1.
题解:
这个题解是以前做过多校之后看的。以前看了很久很久很久很久都没看懂。 现在二十分钟左右看懂了。 是我以前心不在焉吗?
按位统计计算,如果枚举 那么复杂度就是 64 * N
第一条
当统计第K位的时候 可以注意到 第 B+T*A 和 B+(T+2^(K+1))*A 位是相同的
那么 第K位的时候 只需要统计2^(K + 1) - 1次就可以了
第二条
当统计第K位的时候 可以注意到 连续的 (2^K)/A都是连续的0 或者连续的1 所以可以考虑直接连续记录(2^K)/A个结果。
那么 第K位的时候 只需要统计N / ((2^K)/A)次就可以了
综合 第一条 第二条 那么 第K位的时候 只需要统计 2^K/((2^K)/A) 复杂度 变为O(A)
总复杂度为64*A
#include <cstdio>#include <cstring>int main(){ int t; __int64 a, b, n; scanf("%d", &t); for(int cas=1; cas<=t; ++cas){ scanf("%I64d%I64d%I64d",&a,&b,&n); __int64 cnt = 0; __int64 max = b + a * n; for(__int64 i=0; i<64; ++i){ // 一位一位统计 __int64 m = 1LL << i; __int64 mm = m; if(m > max) break; m <<= 1; __int64 cur = a + b; __int64 j = 0; while(j < m && j < n){ __int64 upper = cur + (mm - (cur % mm)) - 1LL; __int64 step = (upper - cur) / a + 1LL; if(j + step >= n){ step = n - j; } if(j + step >= m){ step = m - j; } if(cur & (1LL << i)){ cnt += step * (n / m); if(j + step < (n % m)){ cnt += step; }else if(j < (n % m)){ cnt += ( n % m ) - j; } } cur += a * step; j += step; } } printf("Case #%d: %I64d\n", cas, cnt); } return 0;}
- hdu - 4321 - Arcane Numbers 2 - 数位统计
- hdu 4320 Arcane Numbers 1
- hdu 4320 Arcane Numbers 1
- HDU - 4320 Arcane Numbers 1
- HDU 4320 Arcane Numbers 1
- HDU 4320 Arcane Numbers 1
- HDU 4321 Arcane Numbers 2 按位处理, 想法计数题
- hdu - 4320 - Arcane Numbers 1 - 想法题
- HDU 4320 Arcane Numbers 1 (数论)
- HDU 4320 - Arcane Numbers 1 / SWUN 1429 - 进制转化
- HDU 4320 Arcane Numbers 1(12年多校3-数学)
- hdu 4320 Arcane Numbers 1 多校联合赛(三)第一题
- hdu 4320 Arcane Numbers 1(小数进制转化后是否有限位)
- hdu 4722 Good Numbers 数位dp
- 【数位DP】 HDU 4722 Good Numbers
- hdu 4722 Good Numbers 数位dp
- HDU 4722 Good Numbers (数位dp)
- [数位dp] hdu 4722 Good Numbers
- 非常简单的创建多级目录
- 淡墨青春的QQ伤感日志:忘却了幸福,记起了悲伤
- linux 线程或进程之间通过管道通信(pipe)
- linux wget 使用
- 故事再美,还是会有结局:物是人非的空间日志
- hdu - 4321 - Arcane Numbers 2 - 数位统计
- c语言字节对齐
- python深拷贝浅拷贝
- 第十一章 内核数据类型
- 无法掩饰的憔悴,无法抗拒的痛紧紧相随
- 在winform程序中启动wpf窗体
- OpenCv霍夫圆变换(cvHoughCircles)测试程序
- Java 10大常见异常
- php时间的操作,前一天,后一天时间的获取