UESTC1610 黑红梅方

题意:一行有n个扑克牌,每一个扑克牌有四种颜色,问有几种扑克牌,满足连续四个不相等

题解:状态压缩+递推+矩阵快速幂,不过状态很多,不能直接写,这里分为5种状态

#include <bits/stdc++.h>
#define maxn 5
const long long mod = (1e9+9);
using namespace std;
struct mat{
    long long m[maxn][maxn], len;
    mat(){memset(m, 0, sizeof(m));len=maxn;}
    mat friend operator*(mat a,mat b){
        mat d;
        for(int i=0;i<a.len;i++)
            for(int j=0;j<b.len;j++)
                for(int k=0;k<b.len;k++)
                d.m[i][j] = (d.m[i][j]%mod+(a.m[i][k]*b.m[k][j])%mod)%mod;
        return d;
    }
};
mat f(mat x,long long num){
    mat t;
    for(int i=0;i<t.len;i++) t.m[i][i] = 1;
    while(num){
        if(num&1) t = t*x;
        x = x*x;
        num >>= 1;
    }
    return t;
}
long long ff(long long x,long long t,long long m){
    long long ans=1;
    while(t){
        if(t&1) ans = ans*x%m;
        x = x*x%m;
        t >>= 1;
    }
    return ans;
}
int main(){
    long long  n;
    mat fi, t;
    int tt[5][5]={
        1,0,3,0,0,
        0,1,0,1,2,
        0,1,0,1,2,
        1,0,3,0,0,
        0,1,0,1,1
    };
    fi.m[0][0] = 4;
    fi.m[0][1] = 12;
    fi.m[0][2] = 12;
    fi.m[0][3] = 12;
    fi.m[0][4] = 24;
    for(int i=0;i<5;i++)
        for(int j=0;j<5;j++)
        t.m[i][j] = tt[i][j];
    cin>>n;
    fi = fi*f(t, n-3);
    cout<<((ff(4, n, mod)-fi.m[0][0]-fi.m[0][1]-fi.m[0][2]-fi.m[0][3]-fi.m[0][4])%mod+mod)%mod<<endl;
    return 0;
}
时间: 2024-08-11 04:20:10

UESTC1610 黑红梅方的相关文章

【矩阵乘法】CDOJ1610 黑红梅方

考虑用4^n-不存在连续4个相同的. f(i,j,k,l)表示以i为结尾的序列,最后三位分别是j,k,l时的方案. 可以转移,写一个64*64的转移矩阵. 貌似可以优化?--未完待续. #include<cstdio> #include<vector> #include<iostream> using namespace std; typedef long long ll; #define MOD 1000000009ll typedef vector<ll>

java--控制台梭哈游戏

<span style="font-size:18px;">下面这个类封装了一个梭哈游戏,具体的思路见代码 package lkl1; import java.util.Arrays; import java.util.Scanner; import java.util.Random; public class SuohaGame { //玩家手里的牌用数字组合表示,第一位数字4--1表示 //牌的花色(分别为黑红梅方),后面的一位或两位数字 //表示牌的大小从1--14分

Java编程练习(四)——集合框架应用

Java集合框架小应用之扑克牌小游戏 学习了Java集合框架之后,我写了一个扑克牌小游戏来巩固知识.学习之余的练习之作,有不足之处还得多多指教了~(*/ω\*) 扑克牌小游戏背景: 1. 创建一副扑克牌,不考虑大小王 包括四种花色:黑桃.红桃.梅花.方片 十三种点数:2-10,J Q K A 2. 创建两名玩家,玩家至少要有ID.姓名.手牌等属性,手牌为扑克牌的集合 3. 洗牌,将之前创建的扑克牌顺序打乱(说明是有序的) 4. 发牌,将洗牌之后的扑克牌集合,从第一张开始,发给两名玩家,按照一人一

五星宏辉破解

五星宏辉破解黑红梅方保单财富线:▓▓183199-99192▓▓ ▓▓Q+Q:152066-6662▓▓ [ 五·星·宏·辉·分·析·仪] [彩·金·宏·辉·遥·控·器 ][草·花·机·破·解·器]这类机器的破解方法和作弊器是真实存在的,一般的人我不会告诉它+善待你的财富++目前效果稳定,这个技术打法是没有的这个你听我的,绝对没有错 真正的技术打法是有一个接收器一个显示器,接收器一定要插卡的才行.别的不敢相信.在业内,所谓技术无非两种,一种叫做BUG,一种叫做技巧.BUG就是漏洞,对于一个上市多

黑客教程:如何在1分钟内黑掉任何网站!绝密分享!

黑客教程:如何黑网站:如果攻击别人电脑:如何破解别人密码!!! 一些黑客惯用手段 包学包会 特别提醒:百度是黑不了的,不要试. 教程一:如何黑网站 方法一: 第一步: 打开IE5.5以上版本,或FireFox1.5以上版本,并且输入目标网址,打开需要被黑的论坛. 第二步: 取一定浓度黑色墨汁少许,口含,将嘴对准你的屏幕正中,喷!!! 第三步: 抬眼看:黑了!!!它黑了!!! 方法二: 第一步: 打开IE5.5以上版本,或FireFox1.5以上版本,并且输入目标网址,打开需要被黑的论坛. 第二步

网赌金沙会被黑提款客服说我违规下注怎么办?

血汗钱 一辈子打工辛辛苦苦赚的钱,就这样被平台黑掉...平台黑你的时候,银行维护审核,异常注单.其实这只是黑网找的借口,说你的出款通道维护,审核完成通知你.不要等到自己的账号被冻结了,那时候神仙也救不了. 不收任何前期费用,只要账号可以正常登录额度可以转换.就有方法出款的,不要被平台坑了.及时挽回自己的财产损失,祈求吧务别删帖,希望可以帮到更多的人.希望你们早日上岸,远离×××.网赌害人.不骗任何人,如果我没帮到你找你收费了可以随处举报.被黑网站方都有哪些借口:你的账户异常登录.网站维护.网站出

网赌被黑出款通道审核维护系统异常风控不给出款怎么办?

生活不可能一帆风顺,总会有波折,总会有险阻,生活是个爱开玩笑的孩子,也许今天给你所有,明天又会让你一无所有,无需烦恼,该来的总会来,再黑的夜晚也会有黎明到来的那一刻,不管生活有多么曲折,只要拥有幸福的态度就能挺过漫漫长夜,就能迎来美好的明天. 现今的网络就如同汪洋大海,我们个人只是其中的一束,如此广阔的海洋每时每刻有多少纷争在发生着?相信有很多朋友都遇到了各种理由不给出款,什么系统自动抽查审核,第三方维护,账户异常登录等等,搞得焦头烂额,除了默默的悲哀也不知道怎么办! 毫无征兆的问题就发生了,感

《转》八大算法详细讲解

转自http://blog.csdn.net/jobbofhe/article/details/51426934 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 我们这里说说八大排序就是内部排序. 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序.堆排序或归并排序序. 快速排序:是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短:

八大排序算法

转载:http://blog.csdn.net/hguisu/article/details/7776068 目录(?)[+] 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 我们这里说说八大排序就是内部排序. 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序.堆排序或归并排序序. 快速排序:是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速