2018.08.19 NOIP模拟 number(类数位dp)
Number
题目背景
SOURCE:NOIP2015-SHY-10
题目描述
如果一个数能够表示成两两不同的 3 的幂次的和,就说这个数是好的。
比如 13 是好的,因为 13 = 9 + 3 + 1 。
又比如 90 是好的,因为 90 = 81 + 9 。
现在我们用 a[i] 表示第 i 小的好数。
比如 a[1] = 1, a[2] = 3, a[5] = 10 。
给定 L,R,请求出 a[L] 到 a[R] 的 和 mod 232。
输入格式
第一行一个整数 T,表示数据组数。
接下来 T 行,每行两个整数 L,R 表示一组询问。
输出格式
输出 T 行,每行为一个整数,表示相应询问的答案。
样例数据 1
输入
5
1 3
3 3
4 5
6 7
2 5
输出
8
4
19
25
26
备注
【数据范围】
对 30% 的输入数据:1≤T≤100;R≤1000 。
对 100% 的输入数据:1≤T≤100000;1≤L≤R≤10^18 。
考试的时候正解没调出来,只能交30分暴力233。。。
其实就是类似于二进制倍增的方法来处理一波三进制啊。。。
事实上我们只需要统计每个三进制位出现的次数就可以求得答案。
这让我们想到最高位在取与不取的时候会影响地位低位的情况,因此我们可以像数位dp那样讨论最高位的情况。
代码:
#include<bits/stdc++.h>
#define uint unsigned int
#define ll long long
using namespace std;
inline ll read(){ll ans=0;char ch=getchar();while(!isdigit(ch))ch=getchar();
while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();return ans;}
inline void write(uint x){if(x>9)write(x/10);putchar((x%10)^48);}
int T;
uint mul[64],sum[64];
inline void init(){mul[0]=1,sum[0]=1;for(int i=1;i<=63;++i)mul[i]=mul[i-1]*3,sum[i]=sum[i-1]+mul[i];}
inline uint calc(ll x){
uint ret=0,tmp=0;for(int i=63;i;--i)if(((1ll<<i)&x))ret+=sum[i-1]*(1ll<<(i-1)),ret+=tmp*(1ll<<i),ret+=mul[i],tmp+=mul[i];
if(x&1)ret+=tmp+1;return ret;
}
int main(){
T=read(),init();
while(T--){ll a=read(),b=read();write(calc(b)-calc(a-1)),puts("");}
return 0;
}
2018.08.19 NOIP模拟 number(类数位dp)的更多相关文章
- 2018.08.18 NOIP模拟 game(数位dp)
Game 题目背景 SOURCE:NOIP2015-SHY4 题目描述 Alice 和 Bob 正在玩一个游戏,两个人从 1 轮流开始报数,如果遇到 7 的倍数或者遇到的这个数的十进制表示中含 7 , ...
- 2018.06.26 NOIP模拟 号码(数位dp)
题目背景 SOURCE:NOIP2015-GDZSJNZX(难) 题目描述 Mike 正在在忙碌地发着各种各样的的短信.旁边的同学 Tom 注意到,Mike 发出短信的接收方手机号码似乎都满足着特别的 ...
- 2018.08.19 NOIP模拟 change(简单模拟)
Change 题目背景 SOURCE:NOIP2015-SHY-10 题目描述 Alice 和 Bob 又聚在一起了!他们已经厌倦了取石子游戏,现在他们热衷于切题.于是,Alice 找到了一道题让 B ...
- 2018.08.19 NOIP模拟 dp(二分+状压dp)
Dp 题目背景 SOURCE:NOIP2015-SHY-10 题目描述 一块土地有 n 个连续的部分,用 H[1],H[2],-,H[n] 表示每个部分的最初高度.有 n 种泥土可用,他们都能覆盖连续 ...
- 2018.08.22 NOIP模拟 string(模拟)
string [描述] 给定两个字符串 s,t,其中 s 只包含小写字母以及*,t 只包含小写字母. 你可以进行任意多次操作,每次选择 s 中的一个*,将它修改为任意多个(可以是 0 个)它的前一个字 ...
- 2018.08.30 NOIP模拟 graph(dfs序/树剖+线段树)
[描述] 给你一个图,一共有 N 个点,2*N-2 条有向边. 边目录按两部分给出 1. 开始的 n-1 条边描述了一颗以 1 号点为根的生成树,即每个点都可以由 1 号点 到达. 2. 接下来的 N ...
- 2018.08.30 NOIP模拟 wall(模拟)
[问题描述] 万里长城是中国强大的标志,长城在古代的用途主要用于快速传递军事消息和抵御 外敌,在长城上的烽火台即可以作为藏兵的堡垒有可以来点燃狼烟传递消息. 现在有一段 万里长城,一共有 N 个烽火台 ...
- 2018.08.21 NOIP模拟 xorand(01trie)
xorand 描述 有q次操作,每次操作是以下两种: 1. 加入一个数到集合中 2. 查询,查询当前数字与集合中的数字的最大异或值,最大and值,最大or值 输入 第一行1个正整数Q表示操作次数 接下 ...
- 2018.10.19 NOIP模拟 比特战争(kruskal)
传送门 考完发现是sbsbsb题啊. 直接考虑优化状压的转移. 可以证明最优解一定在求最小生成树的时候取得. 因此再最小生成树时维护一下连通块的最值统计答案就行了. 代码
随机推荐
- Activity服务类-5 IdentityService服务类
一.内置用户组(角色)设计表概念 用户和组(或者叫做角色),多对多关联,通过关联表实现 act_id_user 用户表: act_id_group 用户组表: act_id_membership 用户 ...
- javascript 浮点数加减乘除计算会有问题, 整理了以下代码来规避这个问题
/* * js数学计算 add by yan */ /** ** 加法函数,用来得到精确的加法结果 ** 说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显.这个函数返回较 ...
- SQL Server 2005 无法连接到WMI提供程序 无法执行 SQL Server 系统配置检查器
无法连接到WMI提供程序.你没有权限或者该服务器无法访问/cannot connect to WMI provider. You do not have permission or the--由于计算 ...
- input文本框 放上图片img 通过padding relative和absolute 的实现
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- egret 精简游戏项目
新建一个游戏项目,我们可以删除resource文件夹下除了default.thm.json和default.res.json文件,一旦删除,当新建皮肤exml文件时会报错 还可以删除src文件夹里除了 ...
- Css 特性之 transition和transform
CSS 有一些新的属性,可以简化代码的书写,用简单的代码就可以实现复杂的变化.不用像 js 那样,需要写很多代码 这里主要介绍三个属性:transition ,transform,以及translat ...
- springboot测试时 SpringApplicationConfiguration注解不能用
测试时,@SpringApplicationConfiguration(classes = Application.class) 报错,注解不能导入. 在学习spring boot时,按照文档学习时测 ...
- Can not find the tag library descriptor for "http://www.springframework.org/tags"
1.Download the Spring dependency jar2.Place it to the lib folder path is /WEB-INF/lib/spring.jar 3.T ...
- 趣味编程:CPS风格代码(Java 8,Functional Java版)
CPS风格代码(Java 8版) package fp; import java.util.function.IntConsumer; public class CPS { static int ad ...
- HTML的实际演练2
1.html 换行: 如果你想在不产生新的段落下换行,就使用<br/><p>tishi is a praskdjf<br/>ldkfldj</p> 2. ...