1649:【例 2】2^k 进制数

时间限制: 1000 ms         内存限制: 524288 KB

【题目描述】

原题来自:NOIP 2006 提高组

设 r 是个 2k 进制数,并满足以下条件:

1、r 至少是个 2 位的 2k 进制数。

2、作为 2k 进制数,除最后一位外,r 的每一位严格小于它右边相邻的那一位。

3、将 r 转换为 2 进制数 q 后,q 的总位数不超过 w。

在这里,正整数 k 和 w 是事先给定的。

问:满足上述条件的不同的 r 共多少个?

【输入】

输入只一行,为两个正整数 k 和 w。

【输出】

输出为一行,是一个正整数,为所求的计算结果,即满足条件的不同的 rr 的个数(用十进制数表示,要求最高位不得为 0,各数字之间不得插入数字以外的其他字符(例如空格、换行符、逗号等)。

提示:作为结果的正整数可能很大,但不会超过 200 位。

【输入样例】

3 7

【输出样例】

36

【提示】

数据范围与提示:

对于所有数据,1≤k≤9,k<w≤3×104 。

sol:这道其实是道大水题

对于条件二很容易发现是个组合数,而且是严格小于,k的范围也不大,直接n2预处理组合数

统计答案是注意讨论首位是0和非0的情况

Ps:裸的高精貌似会MLE,建议压位

#include <bits/stdc++.h>
using namespace std;
typedef int ll;
inline ll read()
{
ll s=;
bool f=;
char ch=' ';
while(!isdigit(ch))
{
f|=(ch=='-'); ch=getchar();
}
while(isdigit(ch))
{
s=(s<<)+(s<<)+(ch^); ch=getchar();
}
return (f)?(-s):(s);
}
#define R(x) x=read()
inline void write(ll x)
{
if(x<)
{
putchar('-'); x=-x;
}
if(x<)
{
putchar(x+''); return;
}
write(x/);
putchar((x%)+'');
return;
}
#define W(x) write(x),putchar(' ')
#define Wl(x) write(x),putchar('\n')
const int Base=,power=;
int K,B,W;
struct Bignum
{
int a[];
Bignum(){memset(a,,sizeof a);}
Bignum(int x)
{
memset(a,,sizeof a);
while(x)
{
a[++a[]]=x%Base;
x/=Base;
}
return;
}
inline void print()
{
int i;
write(a[a[]]);
for(i=a[]-;i>=;i--)
{
if(a[i]<) putchar('');
if(a[i]<) putchar('');
if(a[i]<) putchar('');
write(a[i]);
}
return;
}
}C[][],ans;
#define P(x) x.print(),putchar(' ')
#define Pl(x) x.print(),putchar('\n')
inline Bignum operator+(const Bignum &p,const Bignum &q)
{
int i;
Bignum ans=p;
for(i=;i<=q.a[];i++)
{
ans.a[i]+=q.a[i];
ans.a[i+]+=ans.a[i]/Base;
ans.a[i]-=(ans.a[i]>=Base)?Base:;
}
while(ans.a[ans.a[]+]) ans.a[]++;
return ans;
}
int main()
{
int i,j;
R(K); R(W);
B=<<K;
C[][]=Bignum();
for(i=;i<=B;i++)
{
for(j=;j<=B;j++)
{
C[i][j]=C[i][j]+C[i-][j];
if(j) C[i][j]=C[i][j]+C[i-][j-];
}
}
int oo=W%K,Up=W/K;
for(i=min(Up,B-);i>=;i--)
{
ans=ans+C[B-][i];
}
if(oo)
{
int Last=(<<oo)-;
for(i=;i<=Last;i++) if((B-i-)>=Up)
{
ans=ans+C[B-i-][Up];
}
Pl(ans);
}
else
{
Pl(ans);
}
return ;
}
/*
input
3 7
output
36 input
2 8
output
4
*/

一本通1649【例 2】2^k 进制数的更多相关文章

  1. k进制正整数的对k-1取余与按位取余

    华电北风吹 天津大学认知计算与应用重点实验室 日期:2015/8/24 先说一下结论 有k进制数abcd,有abcd%(k−1)=(a+b+c+d)%(k−1) 这是由于kn=((k−1)+1)n=∑ ...

  2. [codevs1157]2^k进制数

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

  3. noip2006 2^k进制数

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

  4. NOIP2006 2k进制数

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

  5. P1066 2^k进制数

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

  6. 洛谷 P1066 2^k进制数

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

  7. js各种进制数之间的转换

    计算机中常用的进制数有二进制.八进制.十进制.十六进制 一.十进制 to 其他 var x = 10; // 或定义其他值均可 x.toString(n); // n 代表要转换到的进制,比如n可以为 ...

  8. K进制数

    题目描述 考虑包含N位数字的K-进制数. 定义一个数有效, 如果其K-进制表示不包含两连续的0. 考虑包含N位数字的K-进制数. 定义一个数有效, 如果其K-进制表示不包含两连续的0. 例: 1010 ...

  9. 蓝桥杯 问题 1110: 2^k进制数 (排列组合+高精度巧妙处理)

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

随机推荐

  1. 输入5个学生的信息(包括学号,姓名,英语成绩,计算机语言成绩和数据库成绩), 统计各学生的总分,然后将学生信息和统计结果存入test.txt文件中

    题目分析: 1.首先想到的是数组存放数据,数组肯定是String类型. 2.String类型的数组,5行6列.要把从第0行第2列到第4行第4列的数据取出转换成数值型,再统计三科总分.最后把计算出的总分 ...

  2. P3084 [USACO13OPEN]照片Photo

    题目描述 农夫约翰决定给站在一条线上的N(1 <= N <= 200,000)头奶牛制作一张全家福照片,N头奶牛编号1到N. 于是约翰拍摄了M(1 <= M <= 100,00 ...

  3. [浅谈CSS核心概念] CSS布局模型:float和position

    1.流动模型 HTML元素在默认情况下都是按照"流动模型"进行布局的,网上也有人称之为"普通流"."文档流"之类的.这种布局模式的特点在于: ...

  4. c# speech 文本转语言

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...

  5. 20155305《网络对抗》MSF基础应用

    20155305<网络对抗>MSF基础应用 实验过程 实验系统 靶机1:Windows XP Professional SP2 ,IP地址:192.168.1.108 靶机2:Window ...

  6. [FQ]Tor + Chrome + PAC 尝试 FQ

    记录一次比较成功的FQ经历 1.从Tor官网下载最新的Tor browser,速度较慢可以从文末给出的链接中下载. 2.安装Tor browser. 3. Tor网络设置 3.1 那个描述与你的情况最 ...

  7. Oracle中,如何查看FRA(Flashback Recovery Area)的利用率

    例子: SQL> set linesize 300SQL> select * from V$RECOVERY_AREA_USAGE; FILE_TYPE PERCENT_SPACE_USE ...

  8. Verilog中的有符号计算之认知补码

    Verilog中的有符号计数,一般是自己定义的而不是像C语言之类的定义一个有符号变量就好了.所以,要想在FPGA的世界里随心所欲的进行有符号运算,必须先对补码有一个很好的认知,然后再注意Verilog ...

  9. MFC如何为程序添加图标

    1.找几幅Ico格式的图片,可以在电脑中查找.ico一般都会找到.然后将ico文件放在工程目录下的res文件夹下. 2.点击菜单栏->编辑->添加资源->导入,选择res文件夹中将要 ...

  10. vue-router单页应用简单示例(三)

    用vue-resource向服务器请求数据 我们主要来了解一下以下内容: 模拟服务端返回数据 用vue-resource向服务器请求数据 模拟服务器返回数据   我们用vue-cli创建的项目中,已经 ...