xiaowuga poj3735—Training little cats(特殊操作转化为矩阵操作)
题意:有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(特殊操作转化为矩阵操作)的更多相关文章
- poj3735—Training little cats(特殊操作转化为矩阵操作)
题目链接:http://poj.org/problem?id=3735 题目意思: 调教猫咪:有n只饥渴的猫咪,现有一组羞耻连续操作,由k个操作组成,全部选自: 1. g i 给第i只猫咪一颗花生 2 ...
- [POJ3735]Training little cats
题目:Training little cats 链接:http://poj.org/problem?id=3735 分析: 1)将操作用矩阵表示出来,然后快速幂优化. 2)初始矩阵:$ \left[ ...
- Training little cats poj3735
Training little cats Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9299 Accepted: 2 ...
- Training little cats(poj3735,矩阵快速幂)
Training little cats Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10737 Accepted: ...
- [poj3735] Training little cats_矩乘快速幂
Training little cats poj-3735 题目大意:给你n个数,k个操作,将所有操作重复m次. 注释:三种操作,将第i个盒子+1,交换两个盒子中的个数,将一个盒子清空.$1\le m ...
- 矩阵快速幂 POJ 3735 Training little cats
题目传送门 /* 题意:k次操作,g:i猫+1, e:i猫eat,s:swap 矩阵快速幂:写个转置矩阵,将k次操作写在第0行,定义A = {1,0, 0, 0...}除了第一个外其他是猫的初始值 自 ...
- [POJ 3735] Training little cats (结构矩阵、矩阵高速功率)
Training little cats Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9613 Accepted: 2 ...
- POJ 3735 Training little cats<矩阵快速幂/稀疏矩阵的优化>
Training little cats Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 13488 Accepted: ...
- POJ 3735 Training little cats(矩阵快速幂)
Training little cats Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 11787 Accepted: 2892 ...
随机推荐
- [SHOI2009] 会场预约
Description 题意:支持操作: 按顺序在数轴上插入一条线段,删除并询问所有与这条线段有交的线段个数. 询问当前数轴上一共有多少条线段. Solution 想做了很久的题=.= 观察到和线段\ ...
- 自定义Fiddler插件一
上个月自定义了一个Fiddler的插件,可以根据请求生成接口自动化测试的RF和Python代码,这样测试人员只需要手动操作页面用Fiddler抓取报文,就可以直接生成RF.Python代码,然后只需要 ...
- [转]angular2之@Output() EventEmitter
本文转自:https://www.jianshu.com/p/f2768f927c86 A src/app/components/contains/contain1.ts import { Compo ...
- ASP.NET Core配置环境变量和启动设置
在这一部分内容中,我们来讨论ASP.NET Core中的一个新功能:环境变量和启动设置,它将开发过程中的调试和测试变的更加简单.我们只需要简单的修改配置文件,就可以实现开发.预演.生产环境的切换. A ...
- link rel=alternate网站换肤功能
此方法借助HTML rel属性的alternate属性值实现. <link href="reset.css" rel="stylesheet" type= ...
- C#新功能--命名参数
命名参数会潜在的改变编写代码的方式.这个新功能能使代码更容易阅读和理解. 例如,看一下System.IO名称空间中的File.Copy()方法,它一般构建为 File.Copy(@"C:\m ...
- MVC架构介绍——自运行任务
实例产品基于asp.net mvc 5.0框架,源码下载地址:http://www.jinhusns.com/Products/Download 通过自运行任务来调度及执行程序中需要定时触发或处理的一 ...
- 迭代器模式(Iterator)
1.概念 迭代器模式提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示,属于行为模式的一种 2.模式结构 抽象迭代器(Iterator):此抽象角色定义出遍历元素所需的接口 具体 ...
- css引入页面的三种方法
1.内联式:直接在标签上写样式 <!DOCTYPE html> <html lang="en"> <head> <meta charset ...
- node 链接mysql(自动链接)
Node.js与MySQL交互操作有很多库 felixge/node-mysql 常用 cnpm i mysql --save dev 1.打开mysql 必须要有,我这里面用的是wamp.可视化用的 ...