题意: 通过各种操作进行,给第i只猫花生,第i只猫吃光花生,第i只猫和第j只猫互换花生,问n次循环操作后结果是什么

很明显是构建个矩阵,然后矩阵相乘就好了

#include <iostream>
#include <cstdio>
#include<cstring>
using namespace std;
#define LL long long
#define N 110
LL n,m,d;
struct node{
LL mat[N][N];
node operator*(const node &x){
node tmp;
int i,j,k;
memset(tmp.mat,0,sizeof(tmp.mat));
for(i=0;i<=n;i++)
for(k=0;k<=n;k++){
if(mat[i][k]){
for(j=0;j<=n;j++){
tmp.mat[i][j]+=mat[i][k]*x.mat[k][j];
}
}
}
return tmp;
}
}cat;
node solve(){
int i;
if(m==1)
return cat;
node bcat;
memset(bcat.mat,0,sizeof(bcat.mat));
for(i=0;i<=n;i++)
bcat.mat[i][i]=1;
if(m==0)
return bcat;
while(m){
if(m&1) bcat=bcat*cat;
m>>=1;
cat=cat*cat;
}
return bcat;
}
int main(int argc, char** argv) {
int i,j,k;
LL a,b;
char str[10];
while(scanf("%lld%lld%lld",&n,&m,&d)!=EOF){
if(!n&&!m&&!d)
break;
memset(cat.mat,0,sizeof(cat.mat));
for(i=0;i<=n;i++){
cat.mat[i][i]=1;
}
while(d--){
scanf("%s",str);
if(str[0]=='g'){
scanf("%lld",&a);
cat.mat[0][a]++;
}else if(str[0]=='e'){
scanf("%lld",&a);
for(i=0;i<=n;i++)
cat.mat[i][a]=0;
}else{
scanf("%lld%lld",&a,&b);
for(i=0;i<=n;i++){
LL t=cat.mat[i][a];
cat.mat[i][a]=cat.mat[i][b];
cat.mat[i][b]=t;
}
}
}
node sum=solve();
for(i=1;i<n;i++)
printf("%lld ",sum.mat[0][i]);
printf("%lld\n",sum.mat[0][i]);
}
return 0;
}

poj 3753 Training little cats_矩阵快速幂的更多相关文章

  1. poj 3735 Training little cats 矩阵快速幂+稀疏矩阵乘法优化

    题目链接 题意:有n个猫,开始的时候每个猫都没有坚果,进行k次操作,g x表示给第x个猫一个坚果,e x表示第x个猫吃掉所有坚果,s x y表示第x个猫和第y个猫交换所有坚果,将k次操作重复进行m轮, ...

  2. Training little cats_矩阵快速幂

    Description Facer's pet cat just gave birth to a brood of little cats. Having considered the health ...

  3. POJ 3735 Training little cats<矩阵快速幂/稀疏矩阵的优化>

    Training little cats Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 13488   Accepted:  ...

  4. POJ 3735 Training little cats 矩阵快速幂

    http://poj.org/problem?id=3735 给定一串操作,要这个操作连续执行m次后,最后剩下的值. 记矩阵T为一次操作后的值,那么T^m就是执行m次的值了.(其实这个还不太理解,但是 ...

  5. poj 2888 Magic Bracelet(Polya+矩阵快速幂)

    Magic Bracelet Time Limit: 2000MS   Memory Limit: 131072K Total Submissions: 4990   Accepted: 1610 D ...

  6. POJ 3233 Matrix Power Series 矩阵快速幂+二分求和

    矩阵快速幂,请参照模板 http://www.cnblogs.com/pach/p/5978475.html 直接sum=A+A2+A3...+Ak这样累加肯定会超时,但是 sum=A+A2+...+ ...

  7. POJ 3233 Matrix Power Series 矩阵快速幂

    设S[k] = A + A^2 +````+A^k. 设矩阵T = A[1] 0 E E 这里的E为n*n单位方阵,0为n*n方阵 令A[k] = A ^ k 矩阵B[k] = A[k+1] S[k] ...

  8. poj 3613 Cow Relays【矩阵快速幂+Floyd】

    !:自环也算一条路径 矩阵快速幂,把矩阵乘法的部分替换成Floyd(只用一个点扩张),这样每"乘"一次,就是经过增加一条边的最短路,用矩阵快速幂优化,然后因为边数是100级别的,所 ...

  9. POJ 3631 Cow Relays Floyd+矩阵快速幂

    题目描述 For their physical fitness program, N (2 ≤ N ≤ 1,000,000) cows have decided to run a relay race ...

随机推荐

  1. OpenSSL “心脏滴血”漏洞

    OpenSSL "心脏滴血"漏洞 漏洞描述 : OpenSSL软件存在"心脏出血"漏洞,该漏洞使攻击者能够从内存中读取多达64 KB的数据,造成信息泄露. 漏洞 ...

  2. Grid++Report支持CS/BS模式的表报插件

    Grid++Report 可用于开发桌面C/S报表与WEB报表(B/S报表),C/S报表开发适用于VB.NET.C#.VB.VC.Delphi等.WEB报表开发适用于ASP.ASP.NET.JSP/J ...

  3. IA32与x86

    64位机器相比于32位优点 ①访问虚拟地址范围更大 ②更多的寄存器 ③过程较简单 ④采用条件传送指令 详细看:http://baike.baidu.com/link?url=DoRp7iW_z3cE6 ...

  4. 【LeetCode练习题】Maximum Depth of Binary Tree

    Maximum Depth of Binary Tree Given a binary tree, find its maximum depth. The maximum depth is the n ...

  5. hibernate多对一的操作解析

    在hibernate的关联操作中有很多关系,其中多对一关系是最常见的.我们看这两个表. 这里有部门表和员工表. 那么我们可以这么说一个部门可以有多个员工.这就是1对多的关系.这是我们站在部门表的角度上 ...

  6. 使用Comparable接口的小例子

    代码: public class Student implements Comparable<Student> { private int id; private String name; ...

  7. Error:Execution failed for task &#39;:app:dexDebug&#39;. &gt; com.android.ide.common.process.ProcessException

    异常Log: Error:Execution failed for task ':app:dexDebug'. > com.android.ide.common.process.ProcessE ...

  8. iOS开发系列--打造自己的“美图秀秀”

    概述 在iOS中可以很容易的开发出绚丽的界面效果,一方面得益于成功系统的设计,另一方面得益于它强大的开发框架.今天我们将围绕iOS中两大图形.图像绘图框架进行介绍:Quartz 2D绘制2D图形和Co ...

  9. PC和ARM平台编译Qt的命令

    编译for PC 的Qt过程是: (1)qmake -project (qmake命令,用于创建hello.pro,将所有的文件编译成一个与平台无关的工程文件).(注意:按照前面步骤安装好Qt环境之后 ...

  10. C#实训 打字游戏

    StatusStrip控件 状态条 =进度条+标签 等集合体