您的位置:首页 > 其它

Codevs P1157 2k进制数 2006年NOIP全国联赛提高组

2015-11-04 16:31 459 查看

1157 2k进制数

 

2006年NOIP全国联赛提高组

题目描述 Description

设r是个2k进制数,并满足以下条件:
(1)r至少是个2位的2k进制数。
(2)作为2k进制数,除最后一位外,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 的段,每段对应一位2k进制的数,如果S至少可分成2段,则S所对应的二进制数又可以转换为上述的2k进制数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个。

输入描述 Input Description

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

输出描述 Output Description

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

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

样例输入 Sample Input

3 7

样例输出 Sample Output

36

数据范围及提示 Data Size & Hint

分析

通过另一个思路我们可以得知就是在(0~2^k-1)中选出一些数按照从大到小的顺序即可,也就是说没有必要排列,只需选择即可

对于首位为0  即为 c[2^k-1,i]i∈(2~w div k);

首位不为0就是在比首位小的数中选出w div k个,作为后面的数字。

首位取值范围为(1~2^(w mod k)-1);-1是因为第一位为2^0次方而不是2^1;

组合数可以通过杨辉三角的方式直接推出,所以只用到了高精加。

代码如下

program p1157;
const mp=10000;
type num=array[0..55] of longint;
var k,j,w,mx,i,maxn,wk,wk2:longint;
c:array[0..512,0..512] of num;
ans:num;
function add(num1,num2:num):num;
var i,len:longint;
begin
if num1[0]>num2[0] then len:=num1[0]
else len:=num2[0];
for i:=1 to len do
begin
num1[i]:=num1[i]+num2[i];
num1[i+1]:=num1[i+1]+num1[i] div mp;
num1[i]:=num1[i] mod mp;
end;
num1[0]:=len;
while num1[num1[0]+1]>0 do inc(num1[0]);
exit(num1);
end;

procedure print(x:longint);
begin
if x<10 then write('000',x)
else if x<100 then write('00',x)
else if x<1000 then write('0',x)
else write(x);
end;

begin
readln(k,w);
maxn:=1<


      __   __  

    / \./ \/\_   I Hand You

 __{^\_ _}_  ) }/^\    A Rose...

/ /\_/^\._}_/ // /

( (__{(@)}\__}.//_/__A___A______A_______A______A____

\__/{/(_)\_} )\\ \\---v----V-----V--Y----v---Y-----

 (  (__)_)_/ )\ \>  

  \__/   \__/\/\/

   \__,--'

我只是想造一个分割线。。。。。。

评测结果

测试点#digital1.in 结果:AC 内存使用量:
57600kB 时间使用量: 36ms 
测试点#digital10.in 结果:AC 内存使用量:
57604kB 时间使用量: 38ms 
测试点#digital2.in 结果:AC 内存使用量:
57712kB 时间使用量: 39ms 
测试点#digital3.in 结果:AC 内存使用量:
57600kB 时间使用量: 37ms 
测试点#digital4.in 结果:AC 内存使用量:
57712kB 时间使用量: 41ms 
测试点#digital5.in 结果:AC 内存使用量:
57708kB 时间使用量: 43ms 
测试点#digital6.in 结果:AC 内存使用量:
57708kB 时间使用量: 43ms 
测试点#digital7.in 结果:AC 内存使用量:
57708kB 时间使用量: 42ms 
测试点#digital8.in 结果:AC 内存使用量:
57708kB 时间使用量: 45ms 
测试点#digital9.in 结果:AC 内存使用量:
57708kB 时间使用量: 55ms 

    * *   * *   *    * *

   *    *     *   *      *

<========      *==        *==<<<<<<

     *       *          *

      *   *     *    *      

        *         *

马上考试了。。。唉。。。

————————————————————————————————————————————————————————————————————————————


Innocent 

 guess you really did it this time

我想你这次是真的那样做了

Left yourself in your warpath

亲手把自己丢在了孤立无援的境地

Lost your balance on a tightrope

就像是在钢丝上失去了平衡

Lost your mind tryin’ to get it back

费尽心思想做回原来的你

Wasn’t it easier in your lunchbox days?

但是在悠闲的白天吃午餐里不是更容易吗?

Always a bigger bed to crawl into

而且总有一个更大的床能够翻来覆去

Wasn’t it beautiful when you believed in everything?

当你相信所有事情的时候难道不是很美丽的吗?

And everybody believed in you?

而且所有人也相信了你

It’s alright, just wait and see

一切都很好,只需要等待并向前看

Your string of lights is still bright to me

你那一束微弱的光对我来说依旧明亮

Oh, who you are is not what you’ve been

你做过的事情并不代表现在的你

You’re still an innocent

你仍然是这么的天真

You’re still an innocent

甚至是无罪的

Did some things you can’t speak of

有些话你无法说出口

But tonight you’ll live it all again

但今晚你将它们重蹈覆辙

You wouldn’t be shattered on the floor now

你不会在舞台上被毁掉

If only you had seen what you know now then

除非你当时看到了你现在知道的事

Wasn’t it easier in your firefly-catchin’ days?

但是在捉萤火虫开心的日子里不不是很容易吗?

And everything out of reach, someone bigger brought down to you

而且那些你够不到的东西,总会有更强大的人帮你拿到

Wasn’t it beautiful runnin’ wild ’til you fell asleep?

一直奔跑直到你困得入睡不是很好吗?

Before the monsters caught up to you

特别是在坏蛋能够抓到你之前

It’s alright, just wait and see

一切都很好,只要你等待并向前看

Your string of lights is still bright to me

甚至你那一束微弱的光对我来说依旧明亮

Oh, who you are is not what you’ve been

你之前做的事情并不代表现在的你

You’re still an innocent

你仍然是无辜的

It’s okay, life is a tough crowd

没关系,生活本来就很艰辛

32, and still growin’ up now

32岁的你,依然在成长

Who you are is not what you did

你曾经做了什么事情并不意味着现在的你是谁

You’re still an innocent

你仍然是无辜的

Time turns flames to embers

时间把火焰变成灰烬

You’ll have new Septembers

你也会迎来一个新的九月

Every one of us has messed up too

任何人都会犯错

Minds change like the weather

想法就像天气一样变换无常

I hope you remember

我只希望你能记住

Today is never too late to Be brand new

改变自己永远都不算迟

It’s alright, just wait and see

没关系,只要等待并向前看

Your string of lights is still bright to me

而你那一束微弱的光对我来说依旧明亮

Oh, who you are is not what you’ve been

你做过的事情不代表现在的你

You’re still an innocent

你是无罪的

It’s okay, life is a tough crowd

没关系,生活本来就很艰辛

32, and still growin’ up now

32岁的你,依然在成长

Who you are is not what you did

你曾经做了什么并不意味着你是谁

You’re still an innocent

你仍然是无辜的

You’re still an innocent

你是无罪的

Lost your balance on a tightrope

即使真的在钢丝上行走时失去了平衡

It’s never too late to get it back

下一秒重新站起来,也不算迟
____________________________________________________________________________________________________________________________________

永远不会忘记(。。。)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  pascal 数论 组合数