【codevs 5251】WYW的数字金字塔

142人阅读 评论(0) 收藏 举报
分类:

题目描述 Description

wyw有一个数字n,他要用这个数字写出一个数字金字塔。

wyw用随机数生成器生成了一个小于n且大于1的正整数k。

wyw找来一张白纸,他在白纸的最低端写下了这个数字n。

wyw在n的上面紧挨着写下了一个正整数a1,a1满足不大于n/k,

wyw又在a1上面写下了一个正整数a2,满足a2不大于a1/k,

时间过了t…

wyw在ah-1的上面写下了一个正整数ah,满足ah不大于ah-1/k

wyw已经无法在ah的上方写出不大于ah/k的数字了

这时,wyw就已经写好了一个高度为h的数字金字塔

wyw可以按照这个规则写出好多符合条件的数字金字塔。

试问:wyw一共能够写出多少种数字金字塔?wyw能写出的所有的数字金字塔中最高的金字塔的高度是多少?

注意:由于答案可能较大,所以对每一组数据请输出答案对p取模后的值

输入描述 Input Description
输入数据的第一行包含两个正整数T、p,表示有T组测试数据,p的意义如题目所述

后面跟着T组数据,每组数据仅一行,包含了一个正整数n和k,意义如题目所述

输出描述 Output Description
输出数据一共n行,每行两个整数,表示答案对p取模后的值

样例输入 Sample Input
2 2

6 2

20 3

样例说明:以20 3这组数据为例,wyw能写出的所有金字塔如下
这里写图片描述

因此答案是7 3,对2取模后输出1 1

样例输出 Sample Output
1 1

1 1

数据范围及提示 Data Size & Hint
这里写图片描述

一个神奇的递推递归
找规律,对于每层,方案数为i/k

数据很大,会爆int

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define RI register int
#define LL long long
using namespace std;
const int MAXN = 10000002;
LL n,k,T,p,num[MAXN],s[MAXN];

inline LL read()
{
    char ch = getchar();
    LL f = 1, x = 0;
    while(!(ch >= '0' && ch <= '9')){if(ch == '-')f = -1;ch = getchar();}
    while(ch >= '0' && ch <= '9') {x = x * 10 + (ch - '0');ch = getchar();}
    return x * f;
} 

int main(){
    T = read(),p = read();
    while(T --){
        n = read(),k = read();LL nnn = n,cnt = 0;
    //  memset(num,0,sizeof(num)),memset(s,0,sizeof(s)); 
    //  加了就TLE(* ̄︶ ̄) 
        s[0] = s[1] = num[1] = 1;
        for(RI i = 2; i <= n / k; i ++)
            num[i] = s[i / k],s[i] = s[i - 1] + num[i],s[i] %= p;
        while(true){if(n) cnt ++; else break; n /= k;}
        printf("%lld %lld\n",(s[nnn / k] % p),(cnt % p));
    }
    return 0;
}
查看评论

数字成像系统

数字成像系统暨Image signal processor原理培训,涵盖成像系统基础5讲:1. 数字成像系统介绍2. CMOS image sensor基础3. 镜头光学基础4. 颜色科学基础5. ISP 信号处理基础,以及ISP各模块:6.黑电平与线性化7.Green Imbalance8:9.坏点消除等21讲,3A技术以及图像质量评价与调校6讲
  • 2017年10月14日 07:20

codevs 5251 WYW的数字金字塔

去题面的传送门比较水的DP f[i]以不大于i为底的方案数之和 易知:f[i]=f[i-1]+f[n/k]#include #include #include #include using nam...
  • Loi_LXTT
  • Loi_LXTT
  • 2017-10-23 14:16:20
  • 53

<考试题> codevs 5251 WYW的数字金字塔

*PS:原来暴力优化优化是可以过的么qwq,ljoj 数据手动测并没有T。。。最后默默的吐槽一句,附上一个金字塔的图是因为怕我们没有见过吗。。。go to the problem题目描述 Descri...
  • Loi_Mapleleaf
  • Loi_Mapleleaf
  • 2017-10-23 15:04:36
  • 61

codevs 数字金字塔 1625

题目描述 Description 考虑在下面被显示的数字金字塔. 写一个程序来计算从最高点开始在底部任意处结束的路径经过数字的和的最大. 每一步可以走到下方的点也可以到达右下方的点. 7 3...
  • ssl__lyk
  • ssl__lyk
  • 2017-02-04 21:26:00
  • 54

java打印数字金字塔,适用于所有数

package pritice4; import java.util.Scanner; public class Pritice17_2 { public static void main...
  • ycy0706
  • ycy0706
  • 2015-03-25 20:27:08
  • 2352

打印数字金字塔

package com.love.test; import java.util.Scanner; public class NumberTower { public static void ...
  • u011877621
  • u011877621
  • 2014-10-06 20:42:33
  • 1218

java——数字金字塔代码

import java.util.Scanner ; public class Test2{ public static void main(String[] args){ Scanner in...
  • qq_32907417
  • qq_32907417
  • 2015-12-25 00:04:28
  • 2794

java打印数字金字塔,适用于9以内的数

package pritice4; import java.util.Scanner; public class Pritice17_2 { public static void main...
  • ycy0706
  • ycy0706
  • 2015-03-25 20:02:30
  • 629

输出数字金字塔代码

#include using namespace std; void main() { int i,n; cout cin>>n; for (i=1;i { for(int j=0...
  • ilikehigame
  • ilikehigame
  • 2014-12-26 17:13:37
  • 1332

编写程序打印出数字金字塔。

include main() { int i,j,k,m,n; printf("please input a value:"); scanf("%d",&n); for(i=1;i { ...
  • sinat_22038331
  • sinat_22038331
  • 2015-03-22 15:09:13
  • 628
    个人资料
    等级:
    访问量: 7万+
    积分: 2881
    排名: 1万+
    %%%