Happy Necklace

                                                                          Time Limit: 2000/1000 MS (Java/Others)    Memory Limit:
131072/131072 K (Java/Others)

                                                                                                          Total Submission(s): 19    Accepted Submission(s): 9

Problem Description
Little Q wants to buy a necklace for his girlfriend. Necklaces are single strings composed of multiple red and blue beads.

Little Q desperately wants to impress his girlfriend, he knows that she will like the necklace only if for every prime length continuous subsequence in the necklace, the number of red beads is not less than the number of blue beads.

Now Little Q wants to buy a necklace with exactly n beads.
He wants to know the number of different necklaces that can make his girlfriend happy. Please write a program to help Little Q. Since the answer may be very large, please print the answer modulo 109+7.

Note: The necklace is a single string, {not a circle}.
Input
The first line of the input contains an integer T(1≤T≤10000),
denoting the number of test cases.

For each test case, there is a single line containing an integer n(2≤n≤1018),
denoting the number of beads on the necklace.
Output
For each test case, print a single line containing a single integer, denoting the answer modulo 109+7.
Sample Input
2
2
3
 
Sample Output
3
4
 
Source
 
———————————————————————————————————————————————

题意:一个项链有n个珠子,这个项链是个链,不是一个环,项链上连续素数个珠子中红色珠子个数要大于等于蓝色珠子

解题思路:找出前面几个,发现存在递推关系f[i]=f[i-1]+f[i-3],然后构造矩阵,矩阵快速幂

{1 1 0}

矩阵构造: {a[i],a[i-1],a[i-2]}={a[i-1],a[i-2],a[i-3]}*{0
0 1}

{1 0 0}

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
#include <map>
#include <cmath>
#include <set>
#include <stack>
#include <queue>
#include <vector>
#include <bitset>
#include <functional> using namespace std; #define LL long long
const int INF=0x3f3f3f3f;
#define mod 1000000007 LL n; struct Matrix
{
LL v[5][5];
Matrix()
{
memset(v,0,sizeof v);
}
}dan; Matrix mul(Matrix a,Matrix b,int d)
{
Matrix ans;
for(int i=1; i<=d; i++)
{
for(int j=1; j<=d; j++)
{
for(int k=1; k<=d; k++)
{
ans.v[i][j]+=a.v[i][k]*b.v[k][j];
ans.v[i][j]%=mod;
}
}
}
return ans;
} Matrix pow(Matrix a,LL k,int d)
{
Matrix ans=dan;
while(k)
{
if(k&1) ans=mul(ans,a,d);
k>>=1;
a=mul(a,a,d);
}
return ans;
} int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%lld",&n);
if(n==2) {printf("3\n");continue;}
if(n==3) {printf("4\n");continue;}
if(n==4) {printf("6\n");continue;}
Matrix ans,a;
a.v[1][1]=a.v[3][1]=a.v[1][2]=a.v[2][3]=1;
dan.v[1][1]=6,dan.v[1][2]=4,dan.v[1][3]=3;
ans=pow(a,n-4,3);
printf("%lld\n",ans.v[1][1]);
}
return 0;
}

HDU6029 Happy Necklace 2017-05-07 19:11 45人阅读 评论(0) 收藏的更多相关文章

  1. hdu 1053 (huffman coding, greedy algorithm, std::partition, std::priority_queue ) 分类: hdoj 2015-06-18 19:11 22人阅读 评论(0) 收藏

    huffman coding, greedy algorithm. std::priority_queue, std::partition, when i use the three commente ...

  2. Let the Balloon Rise 分类: HDU 2015-06-19 19:11 7人阅读 评论(0) 收藏

    Let the Balloon Rise Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Oth ...

  3. ZOJ2208 To and Fro 2017-04-16 19:30 45人阅读 评论(0) 收藏

    To and Fro Time Limit: 2 Seconds      Memory Limit: 65536 KB Mo and Larry have devised a way of encr ...

  4. Codeforces816A Karen and Morning 2017-06-27 15:11 43人阅读 评论(0) 收藏

    A. Karen and Morning time limit per test 2 seconds memory limit per test 512 megabytes input standar ...

  5. 在Eclipse中运行hadoop程序 分类: A1_HADOOP 2014-12-14 11:11 624人阅读 评论(0) 收藏

    1.下载hadoop-eclipse-plugin-1.2.1.jar,并将之复制到eclipse/plugins下. 2.打开map-reduce视图 在eclipse中,打开window--> ...

  6. HDU6029 Graph Theory 2017-05-07 19:04 40人阅读 评论(0) 收藏

    Graph Theory                                                                 Time Limit: 2000/1000 M ...

  7. 滑雪 分类: POJ 2015-07-23 19:48 9人阅读 评论(0) 收藏

    滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 83276 Accepted: 31159 Description Mich ...

  8. highgui.h备查 分类: C/C++ OpenCV 2014-11-08 18:11 292人阅读 评论(0) 收藏

    /*M/////////////////////////////////////////////////////////////////////////////////////// // // IMP ...

  9. Hdu2204 Eddy's爱好 2017-06-27 16:11 43人阅读 评论(0) 收藏

    Eddy's爱好 Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Subm ...

随机推荐

  1. spring 整合 hibernate xml配置

    spring 整合 hibernate: hibernate :对数据库交互 spring: ioc   aop 整合点: 1.sessionFactory对象不再由hibernate生成,交由spr ...

  2. 集成学习算法总结----Boosting和Bagging(转)

    1.集成学习概述 1.1 集成学习概述 集成学习在机器学习算法中具有较高的准去率,不足之处就是模型的训练过程可能比较复杂,效率不是很高.目前接触较多的集成学习主要有2种:基于Boosting的和基于B ...

  3. c# 结构体 集合 复习

    添加5个学生的信息到集合中,每个学生都有:学号,姓名,成绩,3个内容,添加完毕后将学生的分数从高到低排列并打印出来,使用结构体 using System; using System.Collectio ...

  4. Hadoop 3.0.0-alpha1几个值得关注的特性

    1.支持纠删码:意味着更灵活的存储策略,即经常使用的数据利用备份方式存储(3倍存储消耗),冷数据利用纠删码容错(1.4倍存储消耗,但会造成额外的IO及CPU消耗): 2.MapReduce任务支持本地 ...

  5. dubbo+springMVC+Spring+Mybatis

    1.新建Maven Project 1.1   1.2   2新建Maven Module ——提供者和消费者都需要引用的共同代码块(如entity和service接口) 2.1 2.2 2.3 2. ...

  6. Linux终极渗透测试命令总结

    本文主要和大家分享Linux终极渗透测试命令总结,如下是一份 Linux 机器的渗透测试备忘录,是在后期开发期间或者执行命令注入等操作时的一些典型命令,设计为测试人员进行本地枚举检查之用. 命令 描述 ...

  7. Java集合set的并、交、差操作

    集合的并.交.差操作 Set<Integer> result = new HashSet<Integer>(); Set<Integer> set1 = new H ...

  8. ThreadPoolExecutor常识

    线程池技术在并发时经常会使用到,java中的线程池的使用是通过调用ThreadPoolExecutor来实现的.ThreadPoolExecutor提供了四个构造函数,最后都会归结于下面这个构造方法: ...

  9. 43. Multiply Strings (String)

    Given two numbers represented as strings, return multiplication of the numbers as a string. Note: Th ...

  10. Swift 项目中可能用到的第三方框架

    这里记录下swift开发中可能用的框架 , 最近浏览了不少,积累在这里,以后用的时候方便查阅.顺便推荐给大家! 这里的框架都是纯swift的 , 感谢开源 ,感谢大神们 . 下拉刷新 BreakOut ...