当前位置: 首页 > 编程日记 > 正文

P1066 2^k进制数 NOIP 2006 提高组 第四题

洛谷蓝题(点击跳转)

提高组 第四题

题目描述

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

(1)r至少是个2位的2^k 进制数。

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

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

在这里,正整数k(1≤k≤9)和w(k<W< span>≤30000)是事先给定的。

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

我们再从另一角度作些解释:设S是长度为w 的01字符串(即字符串S由w个“0”或“1”组成),S对应于上述条件(3)中的q。将S从右起划分为若干个长度为k 的段,每段对应一位2^k进制的数,如果S至少可分成2段,则S所对应的二进制数又可以转换为上述的2^k 进制数r。

例:设k=3,w=7。则r是个八进制数(23=8)。由于w=7,长度为7的01字符串按3位一段分,可分为3段(即1,3,3,左边第一段只有一个二进制位),则满足条件的八进制数有:

2位数:高位为1:6个(即12,13,14,15,16,17),高位为2:5个,…,高位为6:1个(即67)。共6+5+…+1=21个。

3位数:高位只能是1,第2位为2:5个(即123,124,125,126,127),第2位为3:4个,…,第2位为6:1个(即167)。共5+4+…+1=15个。

所以,满足要求的r共有36个。

输入输出格式

输入格式:

输入只有1行,为两个正整数,用一个空格隔开:

k W

输出格式:

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

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

输入输出样例

输入样例#1:
3 7
输出样例#1:
36

 代码有注解,直接看代码吧:

#include<bits/stdc++.h>
using namespace std;//比较主要是方便求和
inline bool comp(string a ,string b)
{if( a.size() < b.size() )return 0;if( a.size() > b.size() )return 1;for( int i = a.size() - 1 ; i >= 0 ; i-- ){if( a[i] < b[i] )return 0;if( a[i] > b[i] )return 1;}return 1;
}
//求两个数的和
inline string sum( string a , string b )
{if( comp( a , b ) == 0 )swap( a , b );string c = "";char x[2] = "";bool n = 0;int bpt = b.size() - 1;for( int i = a.size() - 1 ; i >= 0 ; i-- ){    if( b[bpt] < '0' || b[bpt] > '9' )b[bpt] = '0';x[0] = a[i] + b[bpt] - '0';if( n == 1 ){x[0]++;n = 0;}if( x[0] > '9' ){x[0] -= 10;n = 1;}c.insert( 0 , x );bpt--;if( bpt < 0 ){bpt = 0;b[0] = '0';}}if( n == 1 )c.insert( 0 , "1" );while( c[0] == '0' )c.erase( 0 , 1 );if( c.size() == 0 )c.insert( 0 , "0" );return c;
}
//求两个数的差(保证结果为正数)
string dif( string a , string b )
{string c = "";char x[2] = "";bool n = 0;int bpt = b.size() - 1;for( int i = a.size() - 1 ; i >= 0 ; i-- ){    if( b[bpt] < '0' || b[bpt] > '9' )b[bpt] = '0';x[0] = a[i] - b[bpt] + '0';if( n == 1 ){x[0]--;n = 0;}if( x[0] < '0' ){x[0] += 10;n = 1;}c.insert( 0 , x );bpt--;if( bpt < 0 ){bpt = 0;b[0] = '0';}}while( c[0] == '0' )c.erase( 0 , 1 );if( c.size() == 0 )c.insert( 0 , "0" );return c;
}
//求高精度数与整型数的积
string mul( string a , int b )
{string c = "";char x[2] = "";int n = 0 , y;for( int i = a.size() - 1 ; i >= 0 ; i-- ){y = 0;if( n > 0 )y = n;n = ( a[i] - '0' ) * b + y;x[0] = n % 10 + '0';n /= 10;if( x[0] > '9' ){x[0] -= 10;n++;}c.insert( 0 , x );}while( n > 0 ){x[0] = n % 10 + '0';n /= 10;c.insert( 0 , x );}while( c[0] == '0' )c.erase( 0 , 1 );if( c.size() == 0 )c.insert( 0 , "0" );return c;
}
//求高精度数与整型数的商
string div( string a , int b )
{string c = "";char x[2] = "";int n = 0 , y;for( int i = 0 ; i < a.size() ; i++ ){n *= 10;n += a[i] - '0';x[0] = n / b + '0';n %= b;c.insert( c.size() , x );}while( n > 0 ){x[0] = n % 10 + '0';n /= 10;c.insert( 0 , x );}while( c[0] == '0' )c.erase( 0 , 1 );if( c.size() == 0 )c.insert( 0 , "0" );return c;
}
//把整型数转化成高精度数
string change( int num )
{if( num == 0 )return "0";string a = "";char c[2] = "";while( num > 0 ){c[0] = num % 10 + '0';num /= 10;a.insert( 0 , c );}return a;
}
//覆盖(即用一个高精度数覆盖另一个高精度数)
void instead( string &s , string s0 )
{s.erase( 0 , s.size() );s.insert( 0 , s0 );
}string c[50000];
const int power[10] = { 1 , 2 , 4 , 8 , 16 , 32 , 64 , 128 , 256 , 512 };//打表计算2^nint main()
{int k , w;cin >> k >> w;c[2] = change( ( power[k] - 1 ) * ( power[k] - 2 ) / 2 );string ans = c[2];int most = min( w / k + ( w % k == 0 ? 0 : 1 ) , power[k] - 1 );//most存储max(max不能定义)for( int i = 3 ; i <= most ; i++ ){if( ( power[k] - i ) % i == 0 )c[i].insert( 0 , mul( c[i - 1] , ( power[k] - i ) / i ) );elsec[i].insert( 0 , div( mul( c[i - 1] , power[k] - i ) , i ) );ans = sum( ans , c[i] );}instead( c[most - 1] , "1" );int most2 = min( power[w % k] - 1 , power[k] - most - 1 );if( power[k] - most <= power[w % k] - 1 || most2 <= 0 ){cout << ans;return 0;}//特殊情况,如3 17,最大234567,上限6位3起,这时会误判ans = dif( ans , "1" );//首位为max-1时要减掉for( int i = most ; i < power[k] - 1 - most2 ; i++ ){if( i % ( i - most + 1 ) == 0 )instead( c[i] , mul( c[i - 1] , i / ( i - most + 1 ) ) );elseinstead( c[i] , div( mul( c[i - 1] , i ) , i - most + 1 ) );ans = dif( ans , c[i] );}cout << ans;
}

转载于:https://www.cnblogs.com/weilinxiao/p/11169741.html

相关文章:

线段树专辑——pku 2886 Who Gets the Most Candies?

http://poj.org/problem?id2886 恩&#xff0c;分糖果&#xff0c;快乐的童年啊&#xff01; 题目意思大概n个小孩围成一个圈&#xff0c;每个小孩手里有张卡片&#xff0c;记录着一个数字。开始从第k个孩子&#xff0c;该孩子离开圈子&#xff0c;然后告诉别人他手里的数字&a…

【jsp】通过get和post传值的区别

GET与POST的区别&#xff1a; GET方式提交表单&#xff0c;请求的参数在请求的头部&#xff0c;可以通过request.getQueryString()获取到请求参数及其参数值&#xff1b;POST方式提交表单&#xff0c;请求的参数在请求体中&#xff0c;所以request.getQueryString()方法无法获…

php获取输入流

uc中的用到的代码(在api/uc.php)代码&#xff1a; $post xml_unserialize(file_get_contents(php://input));&#xfeff; php手册&#xff08;http://cn.php.net/manual/zh/wrappers.php.php&#xff09;说明: php://input allows you to read raw data from the request bod…

微信小程序实例源码大全demo下载

怎么本地测试微信小程序实例源码 1.下载源码2.打开微信开发者工具3.添加项目->选择本项目目录->编译执行微信小程序实例源码大全 微信小程序游戏类demo&#xff1a;识色&#xff1b;从相似颜色中挑选不同的一个 源码链接&#xff1a;http://www.wxapp-union.com/forum.ph…

RabbitMQ 学习

参考&#xff1a;https://www.rabbitmq.com/getstarted.html 先在本地安装RabbitMQ 组件(需要安装Erlang组件&#xff09;&#xff0c;启动服务。 激活 RabbitMQs Management Plugin 使用RabbitMQ 管理插件&#xff0c;可以更好的可视化方式查看Rabbit MQ 服务器实例的状态。 打…

怎样提高WebService的性能

服务器端WebService程序using System.Runtime.Serialization.Formatters.Binary;using System.IO;using System.IO.Compression;using System.Data.SqlClient;………public class Service1 : System.Web.Services.WebService{[WebMethod(Description "直接返回 DataSet 对…

【jsp】jsp的内置对象(部分)

一、response 1、setStatus:设置响应状态码。 代码实现&#xff1a; response.setStatus(550); 更改的位置如图&#xff1a; 2、sendRedirect:服务器端跳转 代码实现&#xff1a; response.sendRedirect("Success.jsp"); 3、setContentRType:设置返回内容类型…

linux tar的使用方法

tar [-cxtzjvfpPN] 文件与目录 ....参数&#xff1a;-c &#xff1a;建立一个压缩文件的参数指令(create 的意思)&#xff1b;-x &#xff1a;解开一个压缩文件的参数指令&#xff01;-t &#xff1a;查看 tarfile 里面的文件&#xff01;特别注意&#xff0c;在参数的下达中&a…

关闭webstorm自动保存,并显示文件未保存标识

1.取消自动保存 2.显示编辑状态设置&#xff1a; 转载于:https://www.cnblogs.com/webSong/p/8807732.html

【转】SQL函数:字符串中提取数字,英文,中文,过滤重复字符

SQL函数&#xff1a;字符串中提取数字&#xff0c;英文&#xff0c;中文&#xff0c;过滤重复字符 --提取数字IF OBJECT_ID(DBO.GET_NUMBER) IS NOT NULLDROP FUNCTION DBO.GET_NUMBERGOCREATE FUNCTION DBO.GET_NUMBER(S VARCHAR(100))RETURNS VARCHAR(100)ASBEGINWHILE PATI…

【java】实现数据在页面之间传输

传数据页面&#xff1a; 方法&#xff1a;使用a标签传输数据 格式&#xff1a; <a name"C03S417" href"getRoomFinal.jsp?roomNumberC03S415">入住 </a> 接收数据页面&#xff1a; 方法&#xff1a; &#xff08;1&#xff09;使用java代…

Android画图学习总结(四)——Animation(上)

随着对Drewable的深入了解&#xff0c;发现了Drawable更加强大的功能&#xff1a;显示Animation。Android SDK介绍了2种Animation&#xff1a; Tween Animation&#xff1a;通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果 Frame Animation&#xff1a;顺序播…

ES6 Rest参数

Rest参数接收函数的多余参数&#xff0c;组成一个数组&#xff0c;放在形参的最后&#xff0c;形式如下&#xff1a; function func(a, b, ...theArgs) { // ... }rest参数只包括那些没有给出名称的参数&#xff0c;注意&#xff0c;rest参数之后不能再有其它参数&#xff08;即…

Data - 深入浅出学统计 - 下篇

本文是已读书籍的内容摘要&#xff0c;少部分有轻微改动&#xff0c;但不影响原文表达。 &#xff1a;以漫画形式来讲解最基本的统计概念和方法。 ISBN: 9787121299636https://book.douban.com/subject/26906845/2 - 探寻参数 2.1 - 中心极限定理&#xff08;Central Limit The…

[网摘学习]在Ubuntu上安装和配置OpenStack Nova之二

再收藏一份Openstack的文章,这两天的操作与此相同.但其中出现的问题还需要查找原因.待个人继续学习研究. 原文参考:http://www.linuxde.net/2011/11/1599.html此处仅供学习记录,版权归原作者. OpenStack 是 Python 2.6 写的&#xff0c;CentOS 5.6 上默认的是 Python 2.4 的环境…

【Linux】Linux computer文件夹下各种文件的作用

1、bin&#xff1a;放可执行文件&#xff0c;一些Linux的命令 注&#xff1a;Linux的命令最终都是一些程序&#xff0c;这些程序都放在bin目录和sbin目录 2、boot : 启动目录 3、dev : 存放设备 注&#xff1a;在Linux中把所有硬件都叫设备 4、etc&#xff1a; 安装软件的各种…

售前十年,两种人生

售前十年&#xff0c;两种人生,多重感悟! 售前第一年&#xff1a; 你 开始会觉得兴奋、紧张、恐慌。你对客户的提问&#xff0c;会有机械性的反应&#xff0c;试着说服他&#xff0c;但客户的表现总让你很茫然&#xff0c;你总是想把自己装扮的像一个专家&#xff0c;甚至故意打…

点击返回上一页面

οnclick"javascript:window.history.back(-1);" 方法一、以按钮点击的方式实现&#xff1a; <input type"button" name"Submit" value"返回上一页" οnclick"javascript:window.history.back(-1);"> 或者 &l…

【Linux】Linux 简单操作指令之磁盘管理

注&#xff1a;有关Linux全面的命令可以到网站&#xff1a;http://linux.51yip.com/查询 1、pwd : 显示当前所在位置 2、ll : 显示当前目录下的内容 注&#xff1a; (1)如果开头为一个 d 则为一个文件夹 如果开头为 - 则是一个文件 (2)ll后可以跟上一个目录&#xff0c;表示显…

浅说——九讲背包之01背包

所谓九讲&#xff0c;也就是&#xff1a;0/1背包 0/1背包降维 完全背包 多重背包(二进制优化) 混合背包 二维费用背包 分组背包 有依赖的背包 背包的方案总数\背包的具体方案路径 0/1背包&#xff1a; [问题描述]&#xff08;经典&#xff09;有一个吝啬的地主&#xff0c;不愿…

msvcrt.lib和LIBCD.lib链接冲突

今天在移植一个开源代码到windows的VC6工程&#xff0c;编译时出现了这些奇怪的LINK错误。 msvcrt.lib(MSVCRT.dll) : error LNK2005: _toupper already defined in LIBCD.lib(toupper.obj)msvcrt.lib(MSVCRT.dll) : error LNK2005: _tolower already defined in LIBCD.lib(to…

Oracle 小知识点

-- 表create table test (names varchar2(12),dates date,num int,dou double);-- 视图create or replace view vi_test asselect * from test;-- 同义词create or replace synonym aafor dbusrcard001.aa;-- 存储过程create or replace produce dd(v_id in employee.empoy…

CC2540获取本机MAC地址

//获取自身蓝牙地址void GetOwnAddr(void){ static uint8 ownAddress[6] {0}; ownAddress[5] XREG(0x780E); ownAddress[4] XREG(0x780F); ownAddress[3] XREG(0x7810); ownAddress[2] XREG(0x7811); ownAddress[1] XREG(0x7812); ownAddress[0] XREG(0x7813);}转载于:h…

mysql的小练习

建立如下表&#xff1a; 建表语句&#xff1a; class表创建语句 create table class(cid int not null auto_increment primary key, caption varchar(32) not null)engineinnodb default charsetutf8;student表创建语句 create table student(-> sid int not null auto_inc…

针对 Windows Phone 7 上的独立存储的 Sterling

http://msdn.microsoft.com/zh-cn/magazine/hh205658.aspx转载于:https://www.cnblogs.com/thankchunzi/archive/2011/11/18/2254416.html

【Linux】Linux简单操作之文件管理

1、mkdir : 创建文件夹 2、rm &#xff1a; 删除文件或目录 注&#xff1a; 凡是涉及到路径&#xff0c;绝对路径相对路径都可以 &#xff08;1&#xff09;直接使用 rm 文件名可以删除文件&#xff0c;但删除不了文件夹 &#xff08;2&#xff09;删除时会有一行提示 如果…

phpmyadmin另类拿shell

发现了个PHPMYADMIN 结果弱口令登陆进去 爆出绝对路径 然后执行SQL语句发现导出SHELL的时候却发现缺少了import.php这个文件 结果没办法执行MYSQL语句&#xff01; 然后本地测试了下 发现另外的方法phpMyAdmin/sql.php?dbtest&tablea&printview1&sql_queryselect%…

第二章、IP协议详解

一、IP服务的的特点 IP协议是TCP/IP协议族的动力&#xff0c;他为上层协议提供的无状态无连接&#xff0c;不可靠的服务。 无状态是指IP通信双方不同步传输数据的状态信息&#xff0c;因此所有的ip数据报的发送&#xff0c;传出和接受都是相互独立的&#xff0c;没有上下文的联…

为绑定的NSArrayController设置默认的排序

当NSArrayController与一个class或者entity进行绑定&#xff08;Binding&#xff09;之后&#xff0c;可以为这个NSArrayController设置默认的排序。通过在Bindings Insepector中选择Controller Content Parameters -> Sort Descriptor进行默认排序的设定。 1、在.h文件中创…

快速求斯特林数总结(洛谷模板题解)

题目链接 第一类斯特林数行第一类斯特林数列第二类斯特林数行第二类斯特林数列 求一行第一类斯特林数 由第一类斯特林数的推论&#xff0c;\(x^{\overline{n}}\sum_i\begin{bmatrix}n\\i\end{bmatrix}x^i\)&#xff0c;分治FFT计算上升幂即可 \(O(nlog^2n)\)。 求一列第一类斯特…