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>) lt--;
for(;lt>;lt--) cout<<tot[lt];
return ;
}

洛谷P1066 2^k进制数(题解)(递推版)的更多相关文章

  1. 洛谷 P1066 2^k进制数

    P1066 2^k进制数 题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. ( ...

  2. 洛谷P1066 2^k进制数

    P1066 2^k进制数 题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. ( ...

  3. [luogu]P1066 2^k进制数[数学][递推][高精度]

    [luogu]P1066 2^k进制数 题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻 ...

  4. [NOIP2006] 提高组 洛谷P1066 2^k进制数

    题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. (3)将r转换为2进制数q后 ...

  5. 洛谷1066 2^k进制数

    原题链接 大力猜结论竟然猜对了.. 对于一对\(k,w\),我们可以把\(w\)位划分成\(k\)位一段的形式,每一段就是转换成十进制后的一位,这个从题面的解释中应该可以理解. 先不考虑可能多出(即剩 ...

  6. C#版 - Leetcode 504. 七进制数 - 题解

    C#版 - Leetcode 504. 七进制数 - 题解 Leetcode 504. Base 7 在线提交: https://leetcode.com/problems/base-7/ 题目描述 ...

  7. P1066 2^k进制数

    传送门 题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. (3)将r转换为2进 ...

  8. [递归回溯] LeetCode 504七进制数(摸鱼版)

    LeetCode 七进制数 前言: 这个就没什么好说的了 题目:略 步入正题 进位制转换 10 -n 余数加倒叙 没什么好讲的直接上七进制代码 偷个懒 10进位制转7 class Solution { ...

  9. [Luogu P1066] 2^k进制数 (组合数或DP)

    题面 传送门:https://www.luogu.org/problemnew/show/P1066 Solution 这是一道神奇的题目,我们有两种方法来处理这个问题,一种是DP,一种是组合数. 这 ...

随机推荐

  1. 2019/1.7 js面向对象笔记

    面向对象 1.构造函数里的属性怎么看?看this,谁前面有this谁就是属性. num不是属性,是私有作用域下的私有变量. 2.如何查找面向对象中的this 1.构造函数的this指向实例对象 2.如 ...

  2. js循环语句

    1.for循环 for(语句1:语句2:语句3){ 代码块 } //语句1:初始化表达式; //语句2:条件表达式; //语句3:更新表达式; 2.for-in循环 for(x in object){ ...

  3. springboot集成elasticsearch

    在基础阶段学习ES一般是首先是 安装ES后借助 Kibana 来进行CURD 了解ES的使用: 在进阶阶段可以需要学习ES的底层原理,如何通过Version来实现乐观锁保证ES不出问题等核心原理: 第 ...

  4. jQuery链式编程

    链式编程 多行代码合并成一行代码,前提要认清此行代码返回的是不是对象.是对象才能进行链式编程 .html(‘val’).text(‘val’).css()链式编程,隐式迭代 链式编程注意:$(‘div ...

  5. 好代码是管出来的——使用GitHub

    前面的文章介绍了Git的基本概念和用法,本文则是基于GitHub的一个实践介绍,主要内容有: GitHub简介 个人与组织 仓库的创建与维护 Fork与pull request 小结 GitHub简介 ...

  6. go语言模版编程

    传送门: 柏链项目学院 go语言与模版编程 什么是模版编程 模板是将一个事物的结构规律予以固定化.标准化的成果,它体现的是结构形式的标准化.对于我们程序员来说,更直白的理解是:对于要输出的内容,个人位 ...

  7. oracle相关函数

    (大写的PS:oracle存储过程测试进不去解决方案:重新编译:) TRUNC(sysdate, 'd') + 1   ////表示今天所在周的周一的年月日,如今天是2016.04.21周四,则TRU ...

  8. python 提取pdf文字

    安装pdfminer 库 windows 下安装pdfminer3k pip install pdfminer3k Liunx 下安装pdfminer pip install pdfminer 代码 ...

  9. .NET Core 图片操作在 Linux/Docker 下的坑

    一.前言 .NET Core 目前更新到2.2了,但是直到现在在 .NET Core 本身依然不包括和图片有关的 Image.Bitmap 等类型.对于图片的操作在我们开发中很常见,比如:生成验证码. ...

  10. BigDecimal比较大小,BigDecimal判断是否为0

    原文:https://blog.csdn.net/qq_34926773/article/details/83419004 BigDecimal类型的数据,需要比较大小:声明BigDescimal: ...