洛谷P1066 2^k进制数(题解)(递推版)
https://www.luogu.org/problemnew/show/P1066(题目传送)
(题解)https://www.luogu.org/problemnew/solution/P1066;
首先普及一下知识:一个2^k进制n位数转换成2进制数时最多有n*k位;一个n进制数的每位数字属于集合{0,1,……,n-1}。
这样我们就知道给出w、k后r的位数最多为wei=w/k向上取整,但要注意,如果w%k有余,则r在最高位上不能把集合{0,1,……,n-1}的数都取一遍。
又知道r的位数可以是2到wei的任意一个数,且r的位数为i时的状态又可以从r的位数为i-1推过来:
设数组a[i][j]表示r的位数为i、第i位为j时所有符合条件r的数目,则a[i][j]=a[i-1][j+1]+……+a[i-1][2^k-1]。
由此我们可以从r的位数为2时一直推至r的位数为wei。最后别忘了最高位的特殊处理。
AC代码:
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int a[][][],tot[],mmax;
int pow(int a,int b)
{
int ans=,with=a;
while(b)
{
if(b&) ans*=with;
with*=with;
b>>=;
}
return ans;
}
void jiafa(int j[],int a[])
{
int lb=;
while(lb<=j[]||lb<=a[])
{
j[lb]+=a[lb];
if(j[lb]>=)
{
j[lb]%=;
j[lb+]++;
}
lb++;
}
while(j[lb]>=)
{
j[lb]%=;
lb++;
j[lb]++;
}
while(!j[lb]&&lb>) lb--;
if(lb>j[]) j[]=lb;
}
void jiafa1(int a[],int b)
{
int lb=;
while(b)
{
a[++lb]=b%;
b/=;
}
a[]=lb;
jiafa(tot,a);
}
int main()
{
int k,w;
cin>>k>>w;
int g=w/k;
bool youyu=;
int mmax2;
if(w%k)
{
g++;
youyu=;
mmax2=pow(,w%k)-;
}
mmax=pow(,k)-;
for(int i=;i<mmax;i++) jiafa1(a[][i],mmax-i);
int l=,n=;
for(int i=;i<=g;i++)
{
if(i==g&&youyu&&mmax2<mmax)
{
for(int i=mmax-;i>mmax2;i--)
jiafa(a[n][mmax2],a[l][i]);
jiafa(tot,a[n][mmax2]);
for(int j=mmax2-;j>=;j--)
{
memcpy(a[n][j],a[n][j+],sizeof(a[n][j+]));
jiafa(a[n][j],a[l][j+]);
jiafa(tot,a[n][j]);
}
break;
}
jiafa(a[n][mmax-],a[l][mmax]);
jiafa(tot,a[n][mmax-]);
for(int j=mmax-;j>=;j--)
{
memcpy(a[n][j],a[n][j+],sizeof(a[n][j+]));
jiafa(a[n][j],a[l][j+]);
jiafa(tot,a[n][j]);
}
for(int j=;j<=mmax;j++)
memset(a[l][j],,sizeof(a[l][j]));
n++;l++;
if(n==) n=;
if(l==) l=;
}
int lt=tot[];
while(!tot[lt]&<>) lt--;
for(;lt>;lt--) cout<<tot[lt];
return ;
}
洛谷P1066 2^k进制数(题解)(递推版)的更多相关文章
- 洛谷 P1066 2^k进制数
P1066 2^k进制数 题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. ( ...
- 洛谷P1066 2^k进制数
P1066 2^k进制数 题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. ( ...
- [luogu]P1066 2^k进制数[数学][递推][高精度]
[luogu]P1066 2^k进制数 题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻 ...
- [NOIP2006] 提高组 洛谷P1066 2^k进制数
题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. (3)将r转换为2进制数q后 ...
- 洛谷1066 2^k进制数
原题链接 大力猜结论竟然猜对了.. 对于一对\(k,w\),我们可以把\(w\)位划分成\(k\)位一段的形式,每一段就是转换成十进制后的一位,这个从题面的解释中应该可以理解. 先不考虑可能多出(即剩 ...
- C#版 - Leetcode 504. 七进制数 - 题解
C#版 - Leetcode 504. 七进制数 - 题解 Leetcode 504. Base 7 在线提交: https://leetcode.com/problems/base-7/ 题目描述 ...
- P1066 2^k进制数
传送门 题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. (3)将r转换为2进 ...
- [递归回溯] LeetCode 504七进制数(摸鱼版)
LeetCode 七进制数 前言: 这个就没什么好说的了 题目:略 步入正题 进位制转换 10 -n 余数加倒叙 没什么好讲的直接上七进制代码 偷个懒 10进位制转7 class Solution { ...
- [Luogu P1066] 2^k进制数 (组合数或DP)
题面 传送门:https://www.luogu.org/problemnew/show/P1066 Solution 这是一道神奇的题目,我们有两种方法来处理这个问题,一种是DP,一种是组合数. 这 ...
随机推荐
- 2019/1.7 js面向对象笔记
面向对象 1.构造函数里的属性怎么看?看this,谁前面有this谁就是属性. num不是属性,是私有作用域下的私有变量. 2.如何查找面向对象中的this 1.构造函数的this指向实例对象 2.如 ...
- js循环语句
1.for循环 for(语句1:语句2:语句3){ 代码块 } //语句1:初始化表达式; //语句2:条件表达式; //语句3:更新表达式; 2.for-in循环 for(x in object){ ...
- springboot集成elasticsearch
在基础阶段学习ES一般是首先是 安装ES后借助 Kibana 来进行CURD 了解ES的使用: 在进阶阶段可以需要学习ES的底层原理,如何通过Version来实现乐观锁保证ES不出问题等核心原理: 第 ...
- jQuery链式编程
链式编程 多行代码合并成一行代码,前提要认清此行代码返回的是不是对象.是对象才能进行链式编程 .html(‘val’).text(‘val’).css()链式编程,隐式迭代 链式编程注意:$(‘div ...
- 好代码是管出来的——使用GitHub
前面的文章介绍了Git的基本概念和用法,本文则是基于GitHub的一个实践介绍,主要内容有: GitHub简介 个人与组织 仓库的创建与维护 Fork与pull request 小结 GitHub简介 ...
- go语言模版编程
传送门: 柏链项目学院 go语言与模版编程 什么是模版编程 模板是将一个事物的结构规律予以固定化.标准化的成果,它体现的是结构形式的标准化.对于我们程序员来说,更直白的理解是:对于要输出的内容,个人位 ...
- oracle相关函数
(大写的PS:oracle存储过程测试进不去解决方案:重新编译:) TRUNC(sysdate, 'd') + 1 ////表示今天所在周的周一的年月日,如今天是2016.04.21周四,则TRU ...
- python 提取pdf文字
安装pdfminer 库 windows 下安装pdfminer3k pip install pdfminer3k Liunx 下安装pdfminer pip install pdfminer 代码 ...
- .NET Core 图片操作在 Linux/Docker 下的坑
一.前言 .NET Core 目前更新到2.2了,但是直到现在在 .NET Core 本身依然不包括和图片有关的 Image.Bitmap 等类型.对于图片的操作在我们开发中很常见,比如:生成验证码. ...
- BigDecimal比较大小,BigDecimal判断是否为0
原文:https://blog.csdn.net/qq_34926773/article/details/83419004 BigDecimal类型的数据,需要比较大小:声明BigDescimal: ...