题意:有n只猫,对其进行k次操作,然后反复这样操作m次。

   其中g 表示 i 猫加1, e表示 i 猫为0;s表示  i 与 j 猫互换。

解释一下样例:

3 1 6
g 1
g 2
g 2
s 1 2
g 3
e 2

则, (g 1 第一只猫加1):1, 0, 0;=>1,1,0=>1,2,0=>(s 1 2 第一只猫和第二只猫互相交换)2,1,0=>2,1,1=>(第2只猫为0)2,0,1;

好了:我们知道初等矩阵:有交换,置0,哪一行加常数的作用。

偷一张图:

像这样!是不是就可以表示各个操作了,其实,这样就相当于每次操作产生一个转置矩阵的初等矩阵T, 那么k次操作就相当于产生k次矩阵。

当然,直接把k次操作赋值给矩阵,其实相当于把k个转置矩阵的初等矩阵变成了一个,(慢慢想其实他们是等价的)。

最后,有多少次这样的操作就快速幂m几次。

答案就是矩阵[0][1--size]输出就行

代码如下:注意(这个代码还是有问题的,我也不知道运行时错误)

#include<iostream>
#include<cstring>
using namespace std;
#define ll long long
ll n;
struct jz
{
ll num[][];
jz(){ memset(num, , sizeof(num)); }
jz operator*(const jz&p)const
{
jz ans;
for (int k = ; k <= n;++k)
for (int i = ; i <= n;++i)
for (int j = ; j <= n; ++j)
ans.num[i][j] = ans.num[i][j] + num[i][k] * p.num[k][j];
return ans;
}
};
jz POW(jz x, ll n)
{
jz ans;
for (int i = ; i <= n; ++i)ans.num[i][i] = ;
for (; n; n>>=, x=x*x)
if (n & )ans = ans*x;
return ans;
}
int main()
{
ll m, k;
while (cin>>n>>m>>k&&(n+m+k))
{
jz ans;
for (int i = ; i <= n; i++)ans.num[i][i] = ;
char ch[];
int i, j;
while (k--)
{
cin >> ch >> i;
if (ch[] == 'g'){ ans.num[][i]++; }
else if (ch[] == 'e')
{
for (int k = ; k <= n; ++k)
ans.num[k][i] = ;
}
else
{
cin >> j;
for (int k = ; k <= n; ++k)
{
swap(ans.num[k][i], ans.num[k][j]);
}
}
}
ans = POW(ans, m);
for (int i = ; i <= n; ++i)
cout << ans.num[][i] << " \n"[i == n];
}
return ;
}

xiaowuga poj3735—Training little cats(特殊操作转化为矩阵操作)的更多相关文章

  1. poj3735—Training little cats(特殊操作转化为矩阵操作)

    题目链接:http://poj.org/problem?id=3735 题目意思: 调教猫咪:有n只饥渴的猫咪,现有一组羞耻连续操作,由k个操作组成,全部选自: 1. g i 给第i只猫咪一颗花生 2 ...

  2. [POJ3735]Training little cats

    题目:Training little cats 链接:http://poj.org/problem?id=3735 分析: 1)将操作用矩阵表示出来,然后快速幂优化. 2)初始矩阵:$ \left[ ...

  3. Training little cats poj3735

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

  4. Training little cats(poj3735,矩阵快速幂)

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

  5. [poj3735] Training little cats_矩乘快速幂

    Training little cats poj-3735 题目大意:给你n个数,k个操作,将所有操作重复m次. 注释:三种操作,将第i个盒子+1,交换两个盒子中的个数,将一个盒子清空.$1\le m ...

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

    题目传送门 /* 题意:k次操作,g:i猫+1, e:i猫eat,s:swap 矩阵快速幂:写个转置矩阵,将k次操作写在第0行,定义A = {1,0, 0, 0...}除了第一个外其他是猫的初始值 自 ...

  7. [POJ 3735] Training little cats (结构矩阵、矩阵高速功率)

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

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

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

  9. POJ 3735 Training little cats(矩阵快速幂)

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

随机推荐

  1. [HAOI 2016]找相同字符

    Description 题库链接 给定两个只含小写字母字符串 \(s_1,s_2\) ,求出在两个字符串中各取出一个子串使得这两个子串相同的方案数.两个方案不同当且仅当这两个子串中有一个位置不同. \ ...

  2. Ado.net怎么执行存储过程?

    与ADO.Net执行SQL语句的地方只有两点不同1.使用存储过程名代替sql语句2. 使用查询对象SqlCommand,需配置一个CommandType属性 存储过程的执行语法-> exec 存 ...

  3. Java基础——JSON

    一.JSON定义 在百度百科中的解释:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于JavaScript的一个子集. JSON采用完全独立于语言的 ...

  4. 解决升级Spark2.0之后,DataFrame map操作报错

    当我们在使用spark1.6的时候,当我们创建SQLContext读取一个文件之后,返回DataFrame类型的变量可以直接.map操作,不会报错.但是升级之后会包一个错误,如下: 报错:No imp ...

  5. blfs(systemv版本)学习笔记-总页

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! lfs(systemv版本)学习笔记:https://www.cnblogs.com/renren-study-notes/p/ ...

  6. Breeze 部署 Kubernetes 1.12.1高可用集群

    今天看文章介绍了一个开源部署 K8S 的工具,有空研究下~ Github 地址: https://github.com/wise2c-devops/breeze

  7. Python中元组相关知识

    下面给大家介绍以下元组的相关知识: ·元组可以看成是一个不可更改的list 1.元组的创建 # 创建空元祖 t = () print(type(t)) # 创建只有一个值的元组 # 观察可知元组中如果 ...

  8. React Render Props 模式

    概述 Render Props模式是一种非常灵活复用性非常高的模式,它可以把特定行为或功能封装成一个组件,提供给其他组件使用让其他组件拥有这样的能力,接下来我们一步一步来看React组件中如何实现这样 ...

  9. java 约束配置文件和本地约束

    一.寻找spring配置文件约束头(也可直接复制已有的) 1.在本地文件夹解压spring核心包(dist) 例:核心包的约束位置(D:\JavaSources\spring-framework-4. ...

  10. Cookie--小知识总结

    一.何为cookie 由于http协议是无状态的,所以没法知道当前访问的客户端是谁,所以有了cookie这个东西,通过cookie来让服务端知道当前是谁访问我,可以看做是一个身份牌 二.cookie的 ...