题目描述

小 Q 最终还是过了独木桥。 前方的地上散落着 B 朵樱花,此时刮起了风,便引来一场樱花雨。 樱花雨一共持续了 N 秒。每一秒都会有 A 朵樱花飘落。小 Q 细心的记录了每一秒时间 后地上樱花的数目,并将其转换成了二进制。小 Q 想请你统计一下这些二进制数一共有多 少个 1。

输入

第一行一个 T 为数据组数。接下来 T 行,每行有 A、B、N,含义如题目所述。 输出 输出 T 行,每行一个整数为对应的答案。

样例输入

2

7 4 1

5 8 2

样例输出

3

5

样例说明

对于第一组样例,初始有 4 朵樱花, 一秒后,共 11 朵樱花,二进制为 1011,答案为 3 对于第二组样例,初始有 8 朵樱花, 一秒后,共 13 朵樱花,二进制为 1101; 两秒后,共 18 朵樱花,二进制为 10010,答案为 3 + 2 = 5

数据规模与约定

对于 30%的数据, 2<=N<=10^3

对于 60%的数据, 2<=N<=10^6

对于 100%的数据, 2<=N<=10^9 ,1<= T <= 20 ,  1<= A <=10 ^4,  1<= B <=10^16 资源限制 每个测试点空间限制 256MB,时间限制 1s。 一共 10 个测试点,满分 100 分

思路:

依次统计二进制等差数列的每一位上分别共有多少个 1 。 对于这一等差数列 B+A,B+A*2,B+A*3,…,B+A*N,显然第 i 项与第 2^K+i 项在第 K 位上的数字相同。 于是,可以将原数列按位拆成循环节统计。 另外,每一个循环节内连续的几个 0 或几个 1 的长度可以用 O(1)的时间复杂度求出。 这样便以 O(A)的时间复杂度和 O(1)的空间复杂度解决了这道题。

代码:

#include<iostream>
#include<cstdio>
using namespace std;
int T;
int f[1<<18];
long long A,B,N,ans;
long long work(long long x,long long wei)
{
long long res=0;
for(long long i=1;i<=x;++i)
{
if((B+A*i)%wei<(wei>>1))
{
i=min(x,i+((wei>>1)-(B+A*i)%wei-1)/A);
}
else
{
long long tmp=min(x,i+(wei-(B+A*i)%wei-1)/A);
res+=tmp-i+1;i=tmp;
}
}
return res;
}
int main()
{
#ifdef yilnr
#else
freopen("flowers.in","r",stdin);
freopen("flowers.out","w",stdout);
#endif
cin>>T;
while(T--)
{
ans=0;
scanf("%lld%lld%lld",&A,&B,&N);
for(long long i=2;i<=(B+A*N)<<1;i<<=1)
{
if(N/i)ans+=N/i*work(i,i);
ans+=work(N%i,i);
}
printf("%lld\n",ans);
}
fclose(stdin);fclose(stdout);
return 0;
}

【csp模拟赛3】flowers.cpp--循环节的更多相关文章

  1. CSP模拟赛游记

    时间:2019.10.5 考试时间:100分钟(连正式考试时间的一半还没有到)题目:由于某些原因不能公开. 由于第一次接触NOIinux系统所以连怎么建文件夹,调字体,如何编译都不知道,考试的前半小时 ...

  2. 【csp模拟赛4】 珠江夜游 (cruise.cpp)-二分,贪心

    Problem 1 珠江夜游 (cruise.cpp) [题目描述] 小 Z 放假后难得来一趟广州游玩,当然要吃遍广州各路美食小吃然后再 到珠江新城看看远近闻名的小蛮腰啦!可当小 Z 一路吃吃吃以后, ...

  3. 【csp模拟赛4】基站建设 (station.cpp)

    [题目描述] 小 Z 的爸爸是一位通信工程师,他所在的通信公司最近接到了一个新的通 信工程建设任务,他们需要在 C 城建设一批新的基站. C 城的城市规划做得非常好,整个城市被规整地划分为 8 行 8 ...

  4. 【csp模拟赛5】限制 (restrict.cpp)--数学

    自己看吧: 爆搜代码: //春水初涨-春林初盛-春风十里-不如你 //----hzwer // 这是啥子题,读不懂-- //题意有问题 -- #include<iostream> #inc ...

  5. 【csp模拟赛5】购物(shopping.cpp)--常规

    多项式,因为每次的x相同,所以把a和b相加就行了,然后找对称轴,找离对称轴最近的整数点,然而我却写了个暴力,没看x #include <iostream> #include <cst ...

  6. 【csp模拟赛4】旅行计划 (travelling.cpp)--欧拉回路

    [题目描述] 小 Z 打算趁着暑假,开启他的旅行计划.但与其他同学不同的是,小 Z 旅 行时并不关心到达了哪个网红景点打了哪些卡.小 Z 更关注沿路的风光,而且 小 Z 觉得,尽管多次到达同一个地方, ...

  7. 【csp模拟赛1】铁路网络 (network.cpp)

    [题目描述] 在暑假来临之际,小 Z 的地理老师布置了一个暑假作业,让同学们暑假期间 了解一下 C 国的铁路发展史.小 Z 在多番查证资料后发现,C 国在铁路发展初期, 铁路网络有着一个严密规整的结构 ...

  8. 【csp模拟赛1】不服来战 (challenge.cpp)

    [题目描述] 最近小 Z 和他的朋友都迷上了一款手机游戏:不服来战. 游戏的设定十分简单,在游戏开始时,会给出一排共 N 个灯,有的灯是开着 的有的是关着的,每个灯都有一个分数.而玩家可以进行任意次操 ...

  9. 【CSP模拟赛】Freda的迷宫(桥)

    题目描述 Freda是一个迷宫爱好者,她利用业余时间建造了许多迷宫.每个迷宫都是由若干房间和走廊构成的,每条走廊都连接着两个不同的房间,两个房间之间最多只有一条走廊直接相连,走廊都是双向通过.  黄昏 ...

随机推荐

  1. k8s基础环境搭建

    环境准备 服务器之间时间同步 1. 关闭防火墙 systemctl stop firewalld setenforce 0 2. 设置yum源   三台机器都要设置一个master两个node节点 下 ...

  2. Django-redis配置cache和session

    CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", &q ...

  3. tomcat端口号被占用问题

    1  netstat -ano| findstr 8761 2 taskkill /f/t/im 5156

  4. VS2019打开项目加载失败:无法找到 .NET Core SDK。请检查确保已安装此项且 global.json 中指定的版本(如有)与所安装的版本相匹配。

    问题描述: 用VS2019创建了asp.net core项目,正常运行:过几天后,再次打开,发现无法加载项目,报错无法找到.net core sdk.   分析过程: 首先怀疑环境变量的问题,重新设置 ...

  5. python打印表格式数据-星号或注释

    python打印表格式数据,留出正确的空格,格式化打出 代码如下: def printPicnic(itemsDict,leftWidth,rightWidth): print('PICNIC ITE ...

  6. babel-plugin-transform-remove-strict-mode

    场景:在VUE项目中,需要用到横向滚动条,在引入MUI相关的组件后,模板中的代码如下 在控制台中报错 报错内容说的是在严格模式下(strict mode)类型错误 经过推测,觉得可能是mui.js中用 ...

  7. 单选框 RadioButton

    activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout ...

  8. Metasploit Penetration (第一夜加班)

    1.最近白天瞒着上班,晚自习看英语,还要瞒着写论文(现在是看,之前的部分章节被老师否定了,现在开始要从新进行整理)所以只有这晚上来开始看我的渗透测试了,发现渗透的很多知识,只要你平时不用很快就会生疏, ...

  9. 我是怎么找到电子书的 - IT篇

    转自于:http://my.oschina.net/0757/blog/375908#OSC_h2_8 IT-ebooks http://it-ebooks.info/ http://www.it-e ...

  10. 禁止html页面返回上一层

    两种方式: // 方式一 触发返回上一层页面事件,只会重新加载当前页面 window.addEventListener('pageshow', function(e) { if (e.persiste ...