题意:有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. 判断使用设备是PC还是phone

    <script type="text/javascript"> //如果是手机设备,则.. if(/Android|webOS|iPhone|iPod|BlackBer ...

  2. CASE函数

    -> 使用类似switch-case与if-else if -> 语法 •case [字段] •    when 表达式 then 显示数据 •    when 表达式 then 显示数据 ...

  3. c# 读取xml 某个节点值

    一.xml格式如下: <?xml version="1.0" encoding="UTF-8"?><Freight> <freig ...

  4. (2)Microsoft office Word 2013版本操作入门_快速选中

    1.快速选中一行 .一段文字: 1.1光标在一行内,双击会选中一个词组.快速点击三下会选中一段, 1.2 鼠标移动到行首,单击击会选中一行,双击选中一段. 1.3 选择全部内容 Ctrl+A  , 1 ...

  5. java连接OPC之——Windows7 With SP1 网络OPC的DCOM配置

    由于 OPC(OLE for Process Control)建立在 Microsoft 的 COM(COmponent Model)基础 上,并且 OPC 的远程通讯依赖 Microsoft 的 D ...

  6. 【代码笔记】Web-HTML-段落

    一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  7. 【读书笔记】iOS-Objective-C编程

    Objective-C中的类可以继承自任何一个顶级类,需要注意的是,虽然NSObject是最常见的顶级类,但是它并不是唯一的顶级类,例如,NSProxy就是和NSObject一样的顶级类,所以你不能说 ...

  8. Kotlin入门(1)搭建Kotlin开发环境

    Kotlin做为一门编程语言,已经出现好几年了,但此前在国内并不闻名.自从5月份谷歌宣布它成为Android的官方开发语言之后,Kotlin猛然窜红了,虽说短期内Kotlin无法取代Java,但对于一 ...

  9. 使用过AsyncTask、EventBus、Volley以及Retrofit,必须好好了解handler运行机制

    我们都知道在UI线程中不能进行耗时操作,例如数据读写.网络请求.Android 4.0开始,在主线程中进行网络请求甚至会抛出Android.os.NetworkOnMainThreadExceptio ...

  10. (网页)the server responded with a status of 403 (Forbidden)

    403跨域问题.看一下要访问的url.