一本通1649【例 2】2^k 进制数
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 进制数的更多相关文章
- k进制正整数的对k-1取余与按位取余
华电北风吹 天津大学认知计算与应用重点实验室 日期:2015/8/24 先说一下结论 有k进制数abcd,有abcd%(k−1)=(a+b+c+d)%(k−1) 这是由于kn=((k−1)+1)n=∑ ...
- [codevs1157]2^k进制数
[codevs1157]2k进制数 试题描述 设r是个2k 进制数,并满足以下条件: (1)r至少是个2位的2k 进制数. (2)作为2k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. ...
- noip2006 2^k进制数
设r是个2k进制数,并满足以下条件: (1)r至少是个2位的2k进制数. (2)作为2k进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. (3)将r转换为2进制数q后,则q的总位数不超过w ...
- NOIP2006 2k进制数
2^k进制数 题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. (3)将r转换 ...
- P1066 2^k进制数
传送门 题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. (3)将r转换为2进 ...
- 洛谷 P1066 2^k进制数
P1066 2^k进制数 题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. ( ...
- js各种进制数之间的转换
计算机中常用的进制数有二进制.八进制.十进制.十六进制 一.十进制 to 其他 var x = 10; // 或定义其他值均可 x.toString(n); // n 代表要转换到的进制,比如n可以为 ...
- K进制数
题目描述 考虑包含N位数字的K-进制数. 定义一个数有效, 如果其K-进制表示不包含两连续的0. 考虑包含N位数字的K-进制数. 定义一个数有效, 如果其K-进制表示不包含两连续的0. 例: 1010 ...
- 蓝桥杯 问题 1110: 2^k进制数 (排列组合+高精度巧妙处理)
题目链接 题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. (3)将r转换为2 ...
随机推荐
- nodejs 模板引擎ejs的使用
1.test.ejs文件 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...
- Hive JDBC:Permission denied: user=anonymous, access=EXECUTE, inode=”/tmp”
今天使用JDBC来操作Hive时,首先启动了hive远程服务模式:hiveserver2 &(表示后台运行),然后到eclipse中运行程序时出现错误: Permission denied: ...
- 【php增删改查实例】第八节 - 部门管理模块(编写PHP程序)
首先,在同级目录新建一个query.php文件: 接着,去刷新页面,打开F12,NetWork,看看当前的请求能不能走到对应的php文件? 这就说明datagrid确实能够访问到query.php 只 ...
- 11.7 (下午)开课二个月零三天 (PDO)
PDO访问方式操作数据库 mysqli是专门访问MySQL数据库的,不能访问其它数据库.PDO可以访问多种的数据库,它把操作类合并在一起,做成一个数据访问抽象层,这个抽象层就是PDO,根据类操作对 ...
- 一些IT中的工具介绍
1. 史上最全github使用方法:github入门到精通 2. Git教程 3. GIT与GitHub使用简介 简单来说,git是一种版本控制系统.跟svn.cvs是同级的概念.github是一个网 ...
- ubuntu12.04安装OVS
1.下载openVswitch ovs官网 2.运行如下脚本 #!/bin/bash cd /home/sdn/ovs/openvswitch- rm /usr/local/etc/openvswit ...
- Ajax 上传文件(input file FormData)
FormData对象用以将数据编译成键值对,以便用XMLHttpRequest来发送数据.其主要用于发送表单数据,但亦可用于发送带键数据(keyed data),而独立于表单使用. jQuery Aj ...
- 原生 JS 实现手机验证码倒计时
可以使用 pointer-events 来阻止元素成为鼠标事件的 target.html5 新增操作元素 class 类名的方式 classList. classList 方法 add(value): ...
- 使用 Vue.js 2.0+ Vue-resource 模仿百度搜索框
使用 Vue.js 2.0 模仿百度搜索框 <!DOCTYPE html> <html> <head> <meta charset="utf-8&q ...
- Spring Boot (十四): Spring Boot 整合 Shiro-登录认证和权限管理
这篇文章我们来学习如何使用 Spring Boot 集成 Apache Shiro .安全应该是互联网公司的一道生命线,几乎任何的公司都会涉及到这方面的需求.在 Java 领域一般有 Spring S ...