NEU 1040 Count

1040: Count

时间限制: 1 Sec  内存限制: 128 MB
提交: 59  解决: 23
[提交][状态][讨论版]

题目描述

Many ACM team name may be very funny,such as "Complier_Error","VVVVV".Oh,wait for a minute here.

Is it "W W"+"V",or "W"+"V V V",or something others we can treat as?There are several ways we can treat this name "VVVVV" (5 ‘V‘s),as V V can be treat as a W.

For 5 ‘V‘s,our have 8 ways.They are:

  1. V V V V V
  2. V W W
  3. W W V
  4. V W V V
  5. W V W
  6. W V V V
  7. V V W V
  8. V V V W

The problem here is that for n ‘V‘s,how many ways do we have to treat it?Because the answer may be too large, you should output the answer module by p.(If n is 0,then we have just one way.)

输入

There are multiple test cases. The first line of the input contains an integer M, meaning the number of the test cases.
For each test cases, there are two integers n and p in a single line.
You can assume that 0<=n<=2100000000, 0<p<=2009.

输出

For each test case, output the answer with case number in a single line.

样例输入

2
5 5
4 7

样例输出

3
5

题目大意:就是说给你5个V的话“VVVVV”,可能有一部分V连在一起被看做W,问可以看出多少种序列,答案对p取余。输入:第一行一个M表示有M个测试数据,第二行到第M+1行每行两个整数n,p,表示n个V,对p取余。输出:一个整数,要求如题。

菲波那切数列??应该吧

好吧,就是斐波那契额,n的数目由n-1和n-2继承来,n比较大,所以矩阵乘法快速幂优化一下递推
 1 #include<cstdio>
 2 #include<cstring>
 3 int p;
 4 struct matrix
 5 {
 6     int a[2][2];
 7     matrix(matrix &p)
 8     {
 9         for(int i=0;i<2;i++)
10             for(int j=0;j<2;j++)
11                 this->a[i][j]=p.a[i][j];
12     }
13     matrix(int x)
14     {
15         for(int i=0;i<2;i++)
16             for(int j=0;j<2;j++)
17                 this->a[i][j]=x;
18     }
19     matrix()
20     {
21         memset(a,0,sizeof(a));
22         for(int j=0;j<2;j++)
23             this->a[j][j]=1;
24     }
25     matrix operator * (matrix &b)
26     {
27         matrix c;
28         for(int i=0;i<2;i++)
29             for(int j=0;j<2;j++)
30             {
31                 c.a[i][j]=0;
32                 for(int k=0;k<2;k++)
33                 {
34                     c.a[i][j]+=this->a[i][k]*b.a[k][j];
35                 }
36                 c.a[i][j]%=p;
37             }
38         return c;
39     }
40 };
41 matrix quickmult(matrix &a,int k)
42 {
43     matrix ans,temp(a);
44     while(k)
45     {
46         if(k%2)ans=ans*temp;
47         temp=temp*temp;
48         k/=2;
49     }
50     return ans;
51 }
52 int main()
53 {
54     int m,n;
55     scanf("%d",&m);
56     while(m--)
57     {
58         scanf("%d%d",&n,&p);
59         matrix ini,tra;//ini means initial matrix, tra means transform matrix
60         ini.a[0][0]=1;ini.a[0][1]=1;ini.a[1][0]=0;ini.a[1][1]=0;
61         tra.a[0][0]=0;tra.a[0][1]=1;tra.a[1][0]=1;tra.a[1][1]=1;
62         tra=quickmult(tra,n);
63         ini=ini*tra;
64         printf("%d\n",ini.a[0][0]);
65     }
66     return 0;
67 }
 
时间: 2024-12-13 17:21:07

NEU 1040 Count的相关文章

nodejs api 中文文档

文档首页 英文版文档 本作品采用知识共享署名-非商业性使用 3.0 未本地化版本许可协议进行许可. Node.js v0.10.18 手册 & 文档 索引 | 在单一页面中浏览 | JSON格式 目录 关于本文档 稳定度 JSON 输出 概述 全局对象 global process console 类: Buffer require() require.resolve() require.cache require.extensions __filename __dirname module e

山东省赛题 NEU OJ 1444 线段树双标记

http://acm.neu.edu.cn/hustoj/problem.php?id=1444 OJ问题论坛发帖http://t.cn/zjBp4jd FAQ http://t.cn/zjHKbmN Linux问题看http://t.cn/aWnP1n 1444: Devour Magic 时间限制: 1 Sec  内存限制: 256 MB 提交: 129  解决: 21 [提交][状态][讨论版] 题目描述 In Warcraft III, Destroyer is a large flyi

c#数组的count()和length的区别

C# 数组中 Length 表示数组项的个数,是个属性. 而 Count() 也是表示项的个数,是个方法,它的值和 Length 一样.但实际上严格地说 Count() 不是数组的内容,而是 IEnumerable 的内容.这也是为什么 C# 2.0 时数组不能用 Count(),而 3.0 后就可以用 Count() 的原因. 对于数组,据说用 Length 快于 Count(). 所以一般情况:数组我用 Length,IEnumerable(比如 List)我用 Count().

[LeetCode]Count Primes

题目:Count Primes 统计1-n的素数的个数. 思路1: 通常的思想就是遍历(0,n)范围内的所有数,对每个数i再遍历(0,sqrt(i)),每个除一遍来判断是否为素数,这样时间复杂度为O(n*sqrt(n)). 具体实现不在贴代码,过程很简单,两重循环就可以解决.但是效率很差,n较大时甚至会花几分钟才能跑完. 思路2: 用埃拉特斯特尼筛法的方法来求素数,时间复杂度可以达到O(nloglogn). 首先开一个大小为n的数组prime[],从2开始循环,找到一个质数后开始筛选出所有非素数

LeetCode OJ:Count Primes(质数计数)

Count the number of prime numbers less than a non-negative number, n. 计算小于n的质数的个数,当然就要用到大名鼎鼎的筛法了,代码如下,写的有点乱不好意思. 1 class Solution { 2 public: 3 int countPrimes(int n) { 4 vector<int> vtor(n + 1, 0); 5 vector<int> ret; 6 for (int i = 0; i <=

解决mysql 1040错误Too many connections的方法

1.可能是mysql的max connections设置的问题 2.可能是多次insert,update操作没有关闭session,需要在spring里配置transaction支持. 解决: 1.修改tomcat里的session 的time-out时间减少为20,(不是必改项) 2.对处理量大的对数据库insert或update的操作提供transaction支持. ======================================= 下面的是解决办法: com.mysql.jdb

mysql count distinct 统计结果去重

mysql的sql语句中,count这个关键词能统计表中的数量,如 有一个tableA表,表中数据如下: id name age 1 tony 18 2 jacky 19 3 jojo 18 SELECT COUNT(age) FROM tableA 以上这条语句能查出table表中有多少条数据.查询结果是3 而COUNT这个关键词与 DISTINCT一同使用时,可以将统计的数据中某字段不重复的数量. 如: SELECT COUNT(DISTINCT age) from tableA 以上语句的

linq to sql (Group By/Having/Count/Sum/Min/Max/Avg操作符) (转帖)

http://wenku.baidu.com/link?url=2RsCun4Mum1SLbh-LHYZpTmGFMiEukrWAoJGKGpkiHKHeafJcx2y-HVttNMb1BqJpNdwaOpCflaajFY6k36IoCH_D82bk2ccu468uzDRXvG 基于LINQ+to+Entity数据访问技术的应用研究 Group By/Having操作符 适用场景:分组数据,为我们查找数据缩小范围. 说明:分配并返回对传入参数进行分组操作后的可枚举对象.分组:延迟 1.简单形式:

[LeetCode] 222. Count Complete Tree Nodes Java

题目: Given a complete binary tree, count the number of nodes. Definition of a complete binary tree from Wikipedia:In a complete binary tree every level, except possibly the last, is completely filled, and all nodes in the last level are as far left as