题意:有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. 正则检查是否为IP地址

    /// <summary> /// 是否为ip /// </summary> /// <param name="ip"></param&g ...

  2. Windows环境使用Nexus-3.x搭建Maven私服

    [前言] 本文主要讲解在Wiindows环境下搭建最新出的Nexus 3.x私服. 1.搭建私服的必要性 一般情况下,各个公司的开发团队为了提高开发效率,都会使用项目构建工具进行开发.常见的构建工具有 ...

  3. Spring Security OAuth2 SSO 单点登录

    基于 Spring Security OAuth2 SSO 单点登录系统 SSO简介 单点登录(英语:Single sign-on,缩写为 SSO),又译为单一签入,一种对于许多相互关连,但是又是各自 ...

  4. 【Tomcat】详解tomcat的连接数与线程池

    前言 在使用tomcat时,经常会遇到连接数.线程数之类的配置问题,要真正理解这些概念,必须先了解Tomcat的连接器(Connector). Connector的主要功能,是接收连接请求,创建Req ...

  5. 【IDEA&&Eclipse】4、IntelliJ IDEA上操作GitHub

    IntelliJ IDEA集成了对GitHub的支持,使上传代码到GitHub和从GitHub下载代码更加方便快捷. 1. 分享代码到GitHub 首先需要在IntelliJ配置Git,如果没有正确配 ...

  6. 140 - The 12th Zhejiang Provincial Collegiate Programming Contest(第三部分)

    Earthstone Keeper Time Limit: 4 Seconds      Memory Limit: 65536 KB Earthstone Keeper is a famous ro ...

  7. 前端面试(原生js篇) - 精确运算

    一.面试题 问:开发的时候有用到过 Math 吗? 答:很多啊.比如生成 GUID 的时候,就会用到 Math.random() 来生成随机数. 问:别的呢?比如向下取整.向上取整? 答:向下取整是  ...

  8. JMeter 集合点设置之Synchronizing Timer的使用

    集合点设置之Synchronizing Timer的使用 by:授客 QQ:1033553122 1.布局设置 注: 1) 说明: 名称:自定义名称 Number of Simulated Users ...

  9. Vue父组件接收不到子组件$emit事件的原因分析

    通常有两种情况: 事件名称不全是小写.事件名称要求全小写. 不是父子关系.这里的父子关系是严格的父子关系,祖孙关系也不行.只能一层一层触发,这在写树形组件时,很容易掉坑里.

  10. JavaWeb:Listener和Filter

    本文内容: Listener Filter 首发日期:2018-07-15 Listener 监听器Listener负责监听事件的发生.我们能在事件发生后执行一些自定义的操作,这就是监听器的意义. 监 ...