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. python 自学 1 day

    #!/usr/bin/env python #coding = utf-8 age_of_oldby = 56 user = "fyt" word = "fyt" ...

  2. 如何使用花生壳 发布WCF服务 进行外网访问

    当我们发布WCF服务的时候,可以直接通过服务器的域名或者IP进行. 但是如果仅仅是通过花生壳进行域名解析,需要我们自己在设置的时候注意以下几点, 直接用图说明问题 1.首先配置花生壳,在红色处填写一个 ...

  3. js传递json格式对象到服务器

    var message = new Object();message.event = "test";message.params = new Object();message.pa ...

  4. RAF(RandomAccessFile)类

    作用:读取文件 /** * */ package com.io.file; import java.io.File; import java.io.IOException; import java.i ...

  5. Android开发教程:shape和selector的结合使用

    shape和selector是Android UI设计中经常用到的,比如我们要自定义一个圆角Button,点击Button有些效果的变化,就要用到shape和selector.可以这样说,shape和 ...

  6. oracle执行计划之-表连接方式

    转载自:http://blog.csdn.net/tianlesoftware/article/details/5826546 在多表联合查询的时候,如果我们查看它的执行计划,就会发现里面有多表之间的 ...

  7. tcpdf最新版 6.2版

    tcpdf6.2版,地址记 录 http://download.csdn.net/detail/hayywcy/9547873

  8. mvc模型验证

    自定义的ValidationAttribute类, Compare   [Compare("MyOtherProperty")] 两个属性必须相同值,比如我们要求用户重复输入两次邮 ...

  9. treeGrid树形数据表格的json数据格式说明

    在使用easyUI 的treeGrid的时候,很多时候我们从数据库取出来的数据treeGrid却不能读取显示成一个树:如下 { menuCode: "a00", menuName: ...

  10. 解决ideviceinstaller未安装的问题

    在Mac上,使用Appium时提示: Could not initialize ideviceinstaller; make sure it is installed and works on you ...