• CCNUOJ 1003 狗狗和花生


    1003: 狗狗和花生

    Time Limit: 1 Sec  Memory Limit: 128 MB
    Submit: 10  Solved: 4
    [Submit][Status][Web Board]

    Description

    有n只狗狗,为了训练狗狗玩花生的能力,主人制定了三种命令:
    1.g i:表示第i只狗狗得到一颗花生
    2.e i:表示让第i只狗狗吃掉它得到的所有花生
    3.s i j:表示让第i只狗狗和第j只狗狗交换各自的花生
    主人给定了k个命令,作为一套命令,为了巩固训练效果,狗狗们需要将这套命令重复m遍……

    Input

    先输入T,表示输入T个测试数据,对于每个测试数据:
    第1行:整数n,m,k(n<=10,m<=10^10,k<=100)
    第2--k+1行:表示一套命令的每个命令,每个命令通过题目中(1,2,3)的语句给出

    Output

    对于每个测试数据,输出一行,有n个数,表示将命令重复m遍后,第1至n只狗狗最后手里的花生数,相邻两个数用一个空格隔开。

    Sample Input

    1 3 1 6 g 1 g 2 g 2 s 1 2 g 3 e 2

    Sample Output

    2 0 1

    矩阵快速幂,构造矩阵求解

    #include<stdio.h>
    #include<string.h>
    int a[105][105],b[105][105],c[105][105],n,m;
    
    void mul()
    {
    	int i,j,k;
    	memset(b,0,sizeof(b));
    	for(i=0;i<=n;i++)
    		for(j=0;j<=n;j++)
    			for(k=0;k<=n;k++)
    				b[i][j]+=c[i][k]*a[k][j];
    	memcpy(c,b,sizeof(b));
    }
    
    void mul2()
    {
    	int i,j,k;
    	memset(b,0,sizeof(b));
    	for(i=0;i<=n;i++)
    		for(j=0;j<=n;j++)
    			for(k=0;k<=n;k++)
    				b[i][j]+=a[i][k]*a[k][j];
    	memcpy(a,b,sizeof(b));
    }
    
    void qm()
    {
    	while(m)
    	{
    		if(m&1) mul();
    		mul2();
    		m>>=1;
    	}
    }
    int main()
    {
    	int T,k,i,j,p,q,tmp;
    	char op[5];
    	scanf("%d",&T);
    	while(T--)
    	{
    		scanf("%d%d%d",&n,&m,&k);
    		memset(a,0,sizeof(a));
    		for(i=0;i<=n;i++)
    			{a[i][i]=1;c[i][i]=1;}
    		for(i=0;i<k;i++)
    		{
    			scanf("%s%d",op,&p);
    			switch(op[0])
    			{
    			case 'g':a[n][p-1]++;break;
    			case 'e':for(j=0;j<=n;j++) a[j][p-1]=0;break;
    			case 's':scanf("%d",&q);for(j=0;j<=n;j++){tmp=a[j][p-1];a[j][p-1]=a[j][q-1];a[j][q-1]=tmp;}
    			}
    		}
    		qm();
    		printf("%d",c[n][0]);
    		for(i=1;i<n;i++)
    			printf(" %d",c[n][i]);
    		printf("\n");
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    Arial Monospaced
    也玩有道难题的双立方数问题:Python 版解法
    用 VB.NET 实现的非确定性计算例子
    Gestalt 在浏览器里用 python/ruby 写客户端脚本
    非确定性计算引擎转化为C#版本并重构
    再谈C#的装箱和拆箱
    谈谈.Net 4.0 中的委托delegate
    在C#中使用SqlDbType.Xml类型参数
    java cmd编译class文件
    Mysql、Oracle插表关于主键的处理
  • 原文地址:https://www.cnblogs.com/laputa/p/2121617.html
Copyright © 2020-2023  润新知