Training little cats

Training little cats

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 6
g 1
g 2
g 2
s 1 2
g 3
e 2
0 0 0

Sample Output
2 0 1
#include <cstdio>
#include <cstring>
#define ll long long
struct matrix{ll m[105][105];}a;
int n, k;
ll m;
// n:cat_num ,k:operation_num , m:operation_times
matrix multiply(matrix x,matrix y)
{
    matrix ans;//set an inside_ans to mark the solution
    memset(ans.m,0,sizeof(ans.m));//initialization the ans
    for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)
            if(x.m[i][j])//if can operate
                for(int k=1;k<=n;k++)//just operate it
                    ans.m[i][k]+=x.m[i][j]*y.m[j][k];
                //matrix_multiply_above
    return ans;//at last ,return the ans
}
matrix quickmod(int p)
{
    matrix ans;//set an inside_ans to mark the solution
    memset(ans.m,0,sizeof(ans.m));//initialization the ans
    for(int i=1;i<=n;i++)ans.m[i][i]=1;//initialization the map
    while(p)//if p !=0 , just go on
    {
        //bit operation
        if(p&1)//just as if(p%2==1)
        ans=multiply(ans,a);//renew the base_number
        p>>=1;//just as p/=2
        a=multiply(a,a);//this operation lower the index amd renew the base_number
    } // if p==0, it means that we have operation p times already
    //this paragraph add the quilk_^_operation
    return ans;//at last ,return the ans
}
int main(){ll tmp;
    while(scanf("%d %lld %d",&n,&m,&k)!=EOF&&(n+m+k))
    //if read case ,and n,m,k!=0,just go on
    {   n++;
        char s[10];int x,y;memset(a.m,0,sizeof(a.m));
        for(int i=1;i<=n;i++)a.m[i][i]=1;//initialization the map,one wide more
        //the more list is mark how many peanuts it have
        for(int i=0;i<k;i++){
           scanf("%s",s);//read an order
            if(s[0]==‘g‘)//case 1:take a peanut
            scanf("%d", &x),a.m[x][n]++;
            //read the i,and let it get a peanut
            if(s[0]==‘e‘)//case 2:eat all the peanuts
            {
               scanf("%d",&x);//read the i
                for(int j=1;j<=n;j++)a.m[x][j]=0;
                //then set it‘s peanuts to 0
                //this line turn 0, no operation it has
            }
            if(s[0]==‘s‘)//case 3:change two cats‘ peanuts
            {
                scanf("%d %d",&x,&y);//read i and j
                for(int j=1;j<=n;j++)//then change their every operation
                tmp=a.m[x][j],a.m[x][j]=a.m[y][j],a.m[y][j]=tmp;
            }
        }matrix ans=quickmod(m);//set a out_side ans to inherit function_inside_ans
        for(int i=1;i<n;i++)printf("%lld ",ans.m[i][n]);printf("\n");
        //against every cat,printf it‘s peanuts_num
    }

program is above,the program is the best language

时间: 2024-10-24 06:12:14

Training little cats的相关文章

POJ3735 Training little cats DP,矩阵快速幂,稀疏矩阵优化

题目大意是,n只猫,有k个动作让它们去完成,并且重复m次,动作主要有三类gi,ei,s i j,分别代表第i只猫获得一个花生,第i只猫吃掉它自己所有的花生,第i只和第j只猫交换彼此的花生.k,n不超过100,m不超过1000,000,000,计算出最后每只猫还剩下多少个花生. 我们假设一个n维向量P,每个分量的值代表这n只猫所拥有的花生数,那么对于gi操作其实就是在第i维分量上加上1:对于ei,那就是在第i维分量上乘以0,说到这里,有木有感觉这很像3D坐标转化中的平移矩阵和缩放矩阵?没错,就是这

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

Training little cats Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 10593   Accepted: 2532 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 t

poj 3735 Training little cats 矩阵

假设n=3 构造矩阵[1,0,0,0] 对于g 1操作,构造矩阵(0行i列++) 1 1 0 0 0 1 0 0 0 0 1 0 0 0 0 1 对于e 1操作,构造矩阵 (i整列清空) 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 对于s 1 2操作,构造矩阵 (i,j整列交换) 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 将k次操作依次按上述构造矩阵,得到一个轮回的转置矩阵.做m次快速幂就行了. 最坑的地方在于,答案要用longlong存,而longlo

poj 3735 Training little cats矩阵快速幂

Training little cats 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. H

矩阵快速幂 POJ 3735 Training little cats

题目传送门 1 /* 2 题意:k次操作,g:i猫+1, e:i猫eat,s:swap 3 矩阵快速幂:写个转置矩阵,将k次操作写在第0行,定义A = {1,0, 0, 0...}除了第一个外其他是猫的初始值 4 自己讲太麻烦了,网上有人讲的很清楚,膜拜之 5 详细解释:http://www.cppblog.com/y346491470/articles/157284.html 6 */ 7 #include <cstdio> 8 #include <cstring> 9 #inc

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

Training little cats Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 10737   Accepted: 2563 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 t

poj 3735 Training little cats(构造矩阵)

http://poj.org/problem?id=3735 大致题意: 有n只猫,开始时每只猫有花生0颗,现有一组操作,由下面三个中的k个操作组成: 1. g i 给i只猫一颗花生米 2. e i 让第i只猫吃掉它拥有的所有花生米 3. s i j 将猫i与猫j的拥有的花生米交换 现将上述一组操作循环m次后,问每只猫有多少颗花生? 再一次感受到了矩阵的强大...循环m次,且m这么大,很容易想到构造转换矩阵,但如何构造是个问题.尤其是第一种操作,第i只猫增加一个花生.具体构造方法是把矩阵扩大为(

POJ 3735 Training little cats 矩阵快速幂应用

点击打开链接 Training little cats Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 9807   Accepted: 2344 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

poj 3735 Training little cats(矩阵快速幂)

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 t