LOJ10163 Amount of Degrees
题目描述
求给定区间 [X,Y] 中满足下列条件的整数个数:这个数恰好等于 KK 个互不相等的 BB 的整数次幂之和。例如,设 X=15,Y=20,K=2,B=2,则有且仅有下列三个数满足题意
输入格式
第一行包含两个整数 X 和 Y,接下来两行包含整数 K 和 B。
输出格式
只包含一个整数,表示满足条件的数的个数。
样例
样例输入
15 20
2
2
样例输出
3
数据范围与提示
对于全部数据,1≤X≤Y≤2^31−1,1≤K≤20,2≤B≤10。
______________________________________________________________________________________________
数位动归
一类区间统计问题,区间较大,无法用暴力求解或组合数学求解。
常见为求区间内满足某类条件的X进制数的个数。条件往往与数位有关。
此题:
首先,区间具有相减的性质。count[i...j]=count[ 0...j ] - count[ 0...i-1 ]。
这样问题就变成了0到i的x进制数有多少个满足条件。
因为是互不相等的k进制数,所以,转成k进制后,每个位上要么是0要么是1。
这样f[i][j]表示长度I的2进制数,有j个1的种类
f[i][j]=f[i-1][j]+f[i-1][j-1]
______________________________________________________________________________________________
1 #include<bits/stdc++.h>
2 using namespace std;
3 int x,y,k,b;
4 int wei[32];
5 int f[32][32];
6 void prech(int &x,int b)
7 {
8 int js=0;
9 while(x>0)
10 {
11 wei[++js]=x%b;
12 x/=b;
13 }
14 while(js>0)
15 {
16 if(wei[js]==1)x^=1<<(js-1);
17 else if(wei[js]>1)
18 {
19 for(int i=js;i>0;--i)x^=1<<(i-1);
20 break;
21 }
22 --js;
23 }
24 }
25 void dp()
26 {
27 f[0][0]=1;
28 for(int i=1;i<=31;++i)
29 {
30 f[i][0]=f[i-1][0];
31 for(int j=1;j<=i;++j)f[i][j]=f[i-1][j]+f[i-1][j-1];
32 }
33 }
34 int work(int x,int k)
35 {
36 int js=0,ans=0;
37 for(int i=31;i>0;--i)
38 {
39 if(x&(1<<i))
40 {
41 ++js;
42 if(js>k)break;
43 x=x^(1<<i);
44 }
45 if((1<<(i-1))&x)ans+=f[i-1][k-js];
46 }
47 if(js+x==k)ans++;
48 return ans;
49 }
50 int main()
51 {
52 scanf("%d%d%d%d",&x,&y,&k,&b);
53 x--;
54 prech(x,b);prech(y,b);
55 dp();
56 cout<<work(y,k)-work(x,k);
57 return 0;
58 }
LOJ10163 Amount of Degrees的更多相关文章
- 【数位DP】[LOJ10163]Amount of Degrees
发现自己以前对数位DP其实一窍不通... 这题可以做一个很简单的转换:一个数如果在$b$进制下是一个01串,且1的个数恰好有k个,那么这个数就是合法的(刚开始没判断必定是01串,只判断了1的个数竟然有 ...
- [TimusOJ1057]Amount of Degrees
[TimusOJ1057]Amount of Degrees 试题描述 Create a code to determine the amount of integers, lying in the ...
- 一本通1585【例 1】Amount of Degrees
1585: [例 1]Amount of Degrees 时间限制: 1000 ms 内存限制: 524288 KB 题目描述 原题来自:NEERC 2000 Central Subr ...
- Timus Online Judge 1057. Amount of Degrees(数位dp)
1057. Amount of Degrees Time limit: 1.0 second Memory limit: 64 MB Create a code to determine the am ...
- [ACM] ural 1057 Amount of degrees (数位统计)
1057. Amount of Degrees Time limit: 1.0 second Memory limit: 64 MB Create a code to determine the am ...
- Ural Amount of Degrees(数位dp)
传送门 Amount of Degrees Time limit: 1.0 secondMemory limit: 64 MB Description Create a code to determi ...
- 【算法•日更•第十二期】信息奥赛一本通1585:【例 1】Amount of Degrees题解
废话不多说,直接上题: 1585: [例 1]Amount of Degrees 时间限制: 1000 ms 内存限制: 524288 KB提交数: 130 通过数: 68 [ ...
- [ural1057][Amount of Degrees] (数位dp+进制模型)
Discription Create a code to determine the amount of integers, lying in the set [X; Y] and being a s ...
- URAL 1057 Amount of Degrees (数位dp)
Create a code to determine the amount of integers, lying in the set [X;Y] and being a sum of exactly ...
随机推荐
- 简单谈谈网络抓包,特别是thrift 接口
按照惯例先谈谈最近情况,最近不是刚好跨年吗?看到很多人都在写年度总结,所以我也在写年度总结文章(其实之前我基本没有写过的,今年有点感触,也想记录一下),结果发现写起来有点多,之前还想着元旦前发出来,结 ...
- 多线程那点事—Parallel.for
先看段代码: 1 for (int i = 0; i < 10; i++) 2 { 3 Task.Factory.StartNew(()=>Console.WriteLine($" ...
- 1. 内存分区模型以及new、delete操作
C++程序在执行时,将内存大方向分为 4 个区域,不同区域存放的数据,赋予不同的生命周期,给我们更大的灵活编程 代码区:存放函数二进制代码,由操作系统进行管理 全局区:存放全局变量和静态数据以及常量, ...
- 浅谈ES6数组及对象的解构
一.数组的解构,ES6的新特性,主要是方便操作数组,节省不必要的代码,提高代码质量. 上图例子中, example1: 之前想要获取数组中的值,只能挨个获取下标,然后取值 example2:ES6新特 ...
- [Abp]Abp 新手入门随记
项目结构说明 *.Application 应用服务实现 *.Application.Contracts 包含DTO及应用服务接口 *.DbMigrator 数据迁移项目 开发和生产环境迁移数据库架构和 ...
- MySQL中in('5,6,7')只取第一个id为5对应的数据的思考
通过阅读本文你可以更好的理解两个知识点: 1.#{}与${}在实际项目中的使用,避免在项目中使用不当造成不可预知的Bug; 2.MySQL中in里面如果是字符串的话,为什么只取第一个对应的数据,eg: ...
- idea多模块启动
2018版本的idea 原文链接http://zhhll.icu/2020/04/07/idea/idea%E4%B9%8B%E5%A4%9A%E6%A8%A1%E5%9D%97%E5%90%AF%E ...
- Java NIO 文件通道 FileChannel 用法
FileChannel 提供了一种通过通道来访问文件的方式,它可以通过带参数 position(int) 方法定位到文件的任意位置开始进行操作,还能够将文件映射到直接内存,提高大文件的访问效率.本文将 ...
- JavaScript 内存详解 & 分析指南
前言 JavaScript 诞生于 1995 年,最初被设计用于网页内的表单验证. 这些年来 JavaScript 成长飞速,生态圈日益壮大,成为了最受程序员欢迎的开发语言之一.并且现在的 JavaS ...
- 数学建模学习笔记 | matlab基本命令及用法
前言 数学建模对matlab水平的要求 了解matlab的基本用法,如常用命令.脚本结构.矩阵的基本操作.绘图等: 熟悉matlab的程序结构,能创建和引用函数: 熟悉常见模型的求解算法和套路: 自主 ...