POJ 3735:Training little cats 联想到矩阵相乘
来源:互联网 发布:115gv资源出售淘宝 编辑:程序博客网 时间:2024/06/05 02:49
Description
Facer's pet cat just gave birth to a brood of little cats. Having considered the health of those lovely cats, Facer decides to make the cats to do some exercises. Facer has well designed a set of moves for his cats. He is now asking you to supervise the cats to do his exercises. Facer's great exercise for cats contains three different moves:
g i : Let the ith cat take a peanut.
e i : Let the ith cat eat all peanuts it have.
s i j : Let the ith cat and jth cat exchange their peanuts.
All the cats perform a sequence of these moves and must repeat it m times! Poor cats! Only Facer can come up with such embarrassing idea.
You have to determine the final number of peanuts each cat have, and directly give them the exact quantity in order to save them.
Input
The input file consists of multiple test cases, ending with three zeroes "0 0 0". For each test case, three integers n, m and k are given firstly, where n is the number of cats and k is the length of the move sequence. The following k lines describe the sequence.
(m≤1,000,000,000, n≤100, k≤100)
Output
For each test case, output n numbers in a single line, representing the numbers of peanuts the cats have.
Sample Input
3 1 6g 1g 2g 2s 1 2g 3e 20 0 0
Sample Output
2 0 1
题意是有很多小猫,每个猫一开始有0个花生。
Facer做出g i的动作就是给第i只小猫一个花生。
e i的动作就是让第i只小猫吃掉所有的花生。
s i j的意思是让第i只小猫与第j只小猫交换它们的花生。
这一系列的动作要做m次,问最终每个猫的花生数量。
这个题实际上就是对一个一维数组赋值,交换 经过这样多次的操作之后,问最终这个一位数组的值。
之前没接触过这样的题目,转成二维觉得很新鲜。
g i 就是把第i列的第0行赋值为1。
e i 就是把第i列的所有值赋值为0。
s i j就是交换第i列与第j列的值。
代码:
#include <iostream>#include <algorithm>#include <cmath>#include <vector>#include <string>#include <cstring>#pragma warning(disable:4996)using namespace std;struct matrix {long long m[105][105];};long long n, mo, k;matrix b;matrix mu(matrix no1, matrix no2){matrix t;memset(t.m, 0, sizeof(t.m));long long i, j, k;for (i = 0; i <= n; i++){for (k = 0; k <= n; k++){if (no1.m[i][k]){for (j = 0; j <= n; j++){t.m[i][j] += no1.m[i][k] * no2.m[k][j];}}}}return t;}matrix multi(matrix no, long long x){memset(b.m, 0, sizeof(b.m));long long i;for (i = 0; i <= n; i++){b.m[i][i] = 1;}while (x > 0){if (x & 1)b = mu(b, no);x = x >> 1;no = mu(no, no);}return b;}int main(){//freopen("i.txt", "r", stdin);//freopen("o.txt", "w", stdout);long long i, j, temp;string test;matrix no;while (cin >> n >> mo >> k){if (n == 0 && mo == 0 && k == 0)break;memset(no.m, 0, sizeof(no.m));for (i = 0; i <= n; i++)no.m[i][i] = 1;for (i = 1; i <= k; i++){cin >> test >> temp;if (test == "g"){no.m[0][temp]++;}else if (test == "s"){long long temp2;long long b;cin >> temp2;for (j = 0; j<= n; j++){b = no.m[j][temp];no.m[j][temp] = no.m[j][temp2];no.m[j][temp2] = b;}}else if (test == "e"){for (j = 0; j <= n; j++){no.m[j][temp] = 0;}}}no = multi(no, mo);cout << no.m[0][1];for (i = 2; i <= n; i++){cout << " " << no.m[0][i];}cout << endl;}//system("pause");return 0;}
- POJ 3735:Training little cats 联想到矩阵相乘
- poj 3735 Training little cats 矩阵
- poj 3735 Training little cats 矩阵
- POJ 3735 Training little cats 矩阵二分幂 + 矩阵优化
- POJ 3735 E - Training little cats POJ - 3735 矩阵构造
- POJ 3735 Training little cats
- poj 3735 Training little cats
- POJ 3735 Training little cats
- POJ 3735 Training Little Cats
- poj 3735 Training little cats
- POJ-3735 Training little cats
- POJ-3735 Training little cats
- POJ 3735 Training little cats
- POJ--3735[Training little cats] 矩阵建模+快速幂
- poj 3735 Training little cats(矩阵连乘应用)
- poj 3735 Training little cats(构造矩阵快速幂)
- poj 3735 Training little cats(构造矩阵)
- poj 3735 Training little cats(矩阵快速幂)
- 函数进阶
- hdu 5476 Explore Track of Point(几何)
- Android中子布局填充ScrollView
- 2015年下半年真题强化班二:软考办出题全部来自于指定教程一句话,而不是培训讲义
- [网络和多线程]6、GCD 队列和任务
- POJ 3735:Training little cats 联想到矩阵相乘
- MySQL的一些常用的SQL语句整理
- Linux中VPN频繁掉线解决方案
- USACO 2.2 Preface Numbering (模拟)
- java-design- flyweight
- Different Ways to Add Parentheses -- leetcode
- 黑马程序员——Java语言多线程
- Quartz2D绘图<四>图形填充
- linux之系统分区