2016.1.27

试题描述

杨辉三角是形如如下的数字三角形:

1

1    1

1   2    1

……

现在想求出杨辉三角第N行的N个数中,有多少个数能被给定的质数p整除。

输入
一行两个空格隔开的整数N和p
输出
输出一个整数,表示第N行能被给定的质数p整除的个数
输入示例
3 2
输出示例
1
其他说明
对于60%的数据,N≤30,p≤1000,对于80%的数据,N≤1000,p≤1000,对于100%的数据,N≤〖10〗^9,p≤1000

首先知道是卢卡斯定理 和 组合数取模

然后就一个一个试呗

#include<iostream>
using namespace std;
int a[],e,ans;
int main()
{
int n,p,b,ct;
scanf("%d%d",&n,&p);
b=n-=;
while(b)
{
a[++e]=b%p;
b/=p;
}
for(int i=;i<=n;i++)
{
b=i;ct=;
while(b)
{
if(b%p>a[ct]) {ans+=;break;}
else {ct++;b/=p;}
}
}
printf("%d",ans);
}

然后果断TLE

然后根据杨辉三角的对称性,砍一半

#include<iostream>
using namespace std;
int a[],e,ans;
int main()
{
int n,p,b,ct;
scanf("%d%d",&n,&p);
b=n-=;
while(b)
{
a[++e]=b%p;
b/=p;
}
for(int i=;i<(n+)/;i++)
{
b=i;ct=;
while(b)
{
if(b%p>a[ct]) {ans+=;break;}
else {ct++;b/=p;}
}
}
ans*=;
if(n+&)
{
b=n/;ct=;
while(b)
{
if(b%p>a[ct]) {ans+=;break;}
else {ct++;b/=p;}
}
}
printf("%d",ans);
}

然并卵,依旧TLE

于是机智的我想到了构造

还想到了状态压缩

就是二进制某一位为1表示构造的数在p进制下该位上比n在对应位上大

#include<iostream>
using namespace std;
int a[],e,ans;
int main()
{
int n,p,b,ct;
scanf("%d%d",&n,&p);
b=n-=;
while(b)
{
a[++e]=b%p;
b/=p;
}
for(int t = e- ; t >= ; t-- )
{
for(int i = ( << t ) - ; i >= ; i-- )
{
b=i;ct=a[t+];
for(int j = t- ; j >= ; j-- )
{
if(<<j&b) ct*=p--a[j+];
else ct*=a[j+]+;
}
ans+=ct;
}
}
printf("%d",ans);
}

AC后激动的我瞬间觉得我有做神犇的潜质

但我发现其他人的代码都特短。。。

我方了

冷静后,发现我傻*了

明明可以反着算。。。要知道根据卢卡斯定理构造模p不等于0的数有多简单。。。

看了代码瞬间就懂的

AC代码:

#include<iostream>
using namespace std;
int e,ans=;
int main()
{
int n,p,b;
scanf("%d%d",&n,&p);
b=n-;
while(b)
{
ans*=b%p+;
b/=p;
}
printf("%d",n-ans);
}

HDNOIP201405杨辉三角的更多相关文章

  1. [LeetCode] Pascal's Triangle II 杨辉三角之二

    Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3,Return [1,3, ...

  2. [LeetCode] Pascal's Triangle 杨辉三角

    Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5,Retur ...

  3. POJ2167Irrelevant Elements[唯一分解定理 组合数 杨辉三角]

    Irrelevant Elements Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 2407   Accepted: 59 ...

  4. python生成器实现杨辉三角

    def triangels(): """ 杨辉三角 """ lst = [1] n_count = 2 # 下一行列表长度 while Tr ...

  5. python 生成器生成杨辉三角

    用Python写趣味程序感觉屌屌的,停不下来 #生成器生成展示杨辉三角 #原理是在一个2维数组里展示杨辉三角,空的地方用0,输出时,转化为' ' def yang(line): n,leng=0,2* ...

  6. Java的二维数组的应用及杨辉三角的编写

    (1) 编写一个程序,生成一个10*10的二维随机整数数组,并将该数组的每行最大值保存于一个一维数组中,将每列平均值保存于另外一个一维数组中并分别输出. (2) 编程输出杨辉三角的前10行. 找出一个 ...

  7. POJ3187Backward Digit Sums[杨辉三角]

    Backward Digit Sums Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6350   Accepted: 36 ...

  8. 杨辉三角用java实现

    代码如下: public class ErArray { public static void main(String[] args) { //杨辉三角 int[][] num = new int[1 ...

  9. python 杨辉三角

    前提:端点的数为1. 每个数等于它上方两数之和. 每行数字左右对称,由1开始逐渐变大. 第n行的数字有n项. 第n行数字和为2n-1. 第n行的m个数可表示为 C(n-1,m-1),即为从n-1个不同 ...

随机推荐

  1. 新冲刺Sprint3(第四天)

    一.Sprint介绍 实现了SQLite数据库记录自动登录.注销功能 真机测试效果图:     二.Sprint周期 看板: 燃尽图:

  2. kindeditor本地上传报错,只限初学者

    困扰了我三天的问题,话说百度真的害死人啊,百度上有说路劲错了的,有说包没导的,有说还要改plugins里面的文件的!其实这个都不用动,也有说服务器问题的,还有说缓存的,还有说是ecplise的,反正我 ...

  3. Hive中的排序和分组(对map和reduce的影响,值得一看!)

    order by order by 会对输入做全局排序,因此只有一个reducer(多个reducer无法保证全局有序)只有一个reducer,会导致当输入规 模较大时,需要较长的计算时间. set ...

  4. 手把手原生js简单轮播图

    在团队带人,突然被人问到轮播图如何实现,进入前端领域有一年多了,但很久没自己写过,一直是用大牛写的插件,今天就写个简单的适合入门者学习的小教程.当然,轮播图的实现原理与设计模式有很多种,我这里讲的是用 ...

  5. 毛毛虫学习日记_SQL

    五毛叶的SQL学习: 1.SELECT:(A 表名,a 字段) SELECT A.b, C.c , D.d(a,b,c,d,e...各种自己需要的字段) FROM  A(中心表名) LEFT /INN ...

  6. code标签和pre标签

    code标签: 1.code标签的定义: <code>标签, 用于表示计算机源代码或者其他机器可以阅读的文本内容.软件代码的编写者习惯了编写代码时的代码格式,那么这个<code> ...

  7. Java JDBC链接数据库

     1.注册驱动Class.forname("com.mysql.jdbc.Driver");//这是连接mysql数据库的驱动2.获取数据库连接java.sql.Connectio ...

  8. Android自定义View之倒计时Countdown实现

    先看一下效果: 在点击OK键之后,开始倒计时. 实现步骤 1.新建Android工程"CountdownView" 2.自定义Drawable 自定义View并没有直接的用户交互, ...

  9. ns115 step by step

    一,安装环境: sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev lib ...

  10. 对tomcat中使用反射加载类的理解

    public void init() throws Exception { initClassLoaders(); //加载一下jar包和类 Thread.currentThread().setCon ...