Training little cats poj-3735

    题目大意:给你n个数,k个操作,将所有操作重复m次。

    注释:三种操作,将第i个盒子+1,交换两个盒子中的个数,将一个盒子清空。$1\le m \le 10^9$ , $1\le n , k \le 100$。

      想法:定义开始是的矩阵是n+1行,1列,除了最底下的数是1剩下全是0。然后加法操作就是讲操作答案矩阵的对应位置+1,交换操作就是暴力交换操作答案矩阵的两行,清空操作是将操作答案矩阵的对应行清零。

      至于最后的将所有操作重复,将单次操作答案矩阵快速幂即可。

    最后,附上丑陋的代码... ...

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 110
using namespace std;
struct Matr
{
int x,y;
int a[N][N];
Matr(){memset(a,0,sizeof a);}
Matr operator *(const Matr &z)
{
Matr re;
re.x=x;
re.y=z.y;
for(int i=1;i<=x;i++)
{
for(int j=1;j<=z.y;j++)
{
for(int k=1;k<=y;k++)
{
re.a[i][j]=(re.a[i][j]+a[i][k]*z.a[k][j]);
}
}
}
return re;
}
};
int n;
Matr quick_power(Matr &a,int k)
{
Matr x;
x.x=x.y=n+1;
for(int i=1;i<=n+1;i++)
{
x.a[i][i]=1;
}
Matr y=a;
while(k)
{
if(k&1) x=x*y;
y=y*y;
k>>=1;
}
return x;
}
int main()
{
while(1)
{
int k,m;
scanf("%d%d%d",&n,&m,&k);
if(!n&&!m&&!k) return 0;
if(m==0)
{
for(int i=1;i<=n;i++)
{
printf("0 ");
}
puts("");
continue;
}
Matr x;
x.x=x.y=n+1;
for(int i=1;i<=n+1;i++)
{
x.a[i][i]=1;
}
Matr ans=x;
// cout << k << "Fuck" << endl;
for(int i=1;i<=k;i++)
{
int number;
char s[20];
scanf("%s",s+1);
if(s[1]=='g')
{
scanf("%d",&number);
Matr a=x;
a.a[number][n+1]=1;
ans=ans*a;
// cout << i << endl;
}
if(s[1]=='e')
{
scanf("%d",&number);
for(int j=1;j<=n+1;j++)
{
ans.a[number][j]=0;
}
// ans=ans*a;
}
if(s[1]=='s')
{
int p,q;
scanf("%d%d",&p,&q);
// Matr a=x;
for(int j=1;j<=n+1;j++)
{
int middle=ans.a[q][j];
ans.a[q][j]=ans.a[p][j];
ans.a[p][j]=middle;
// swap(ans.a[p][j],ans.a[q][j]);
}
// ans=ans*a;
}
// puts("begin");
// for(int j=1;j<=n+1;j++)
// {
// for(int r=1;r<=n+1;r++)
// {
// cout << ans.a[j][r] << " " ;
// }
// puts("");
// }
// puts("end");
}
// if(m==0)
// {
// for(int i=1;i<=n;i++)
// {
// printf("0 ");
// }
// puts("");
// }
if(m!=1)
ans=quick_power(ans,m);
Matr ori;
ori.x=n+1;
ori.y=1;
ori.a[n+1][1]=1;
ans=ans*ori;
for(int i=1;i<=n;i++)
{
printf("%d ",ans.a[i][1]);
}
puts("");
// return 0;
}
}
// int main()
// {
// Matr a,b;
// a.x=a.y=b.x=b.y=3;
// for(int i=1;i<=3;i++)
// {
// a.a[i][i]=1;
// }
// a.a[2][3]=1;
// for(int i=1;i<=3;i++)
// {
// swap(a.a[1][i],a.a[2][i]);
// }
// for(int i=1;i<=3;i++)
// {
// for(int j=1;j<=3;j++)
// {
// cout << a.a[i][j] << " " ;
// }
// cout << endl ;
// }
// return 0;
// }

   小结:矩阵好写难调,用处不广泛,但是一些题有奇效(JLOI2018D2T2qwq)

[poj3735] Training little cats_矩乘快速幂的更多相关文章

  1. 2014 Super Training #10 G Nostop --矩阵快速幂

    原题: FZU 2173 http://acm.fzu.edu.cn/problem.php?pid=2173 一开始看到这个题毫无头绪,根本没想到是矩阵快速幂,其实看见k那么大,就应该想到用快速幂什 ...

  2. poj 3735 Training little cats(矩阵快速幂,模版更权威,这题数据很坑)

    题目 矩阵快速幂,这里的模版就是计算A^n的,A为矩阵. 之前的矩阵快速幂貌似还是个更通用一些. 下面的题目解释来自 我只想做一个努力的人 @@@请注意 ,单位矩阵最初构造 行和列都要是(猫咪数+1) ...

  3. HKE和他的小朋友(矩乘快速幂)

    题面: 题目背景: HKE带着\(n\)个小朋友做游戏 题目描述: 现在有n个座位编号为\(1\)至\(n\),这些小朋友也编号\(1\)至\(n\).一开始所有小朋友都坐在相应的座位上.HKE的游戏 ...

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

    Training little cats Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 11787 Accepted: 2892 ...

  5. HDU 6395 2018 Multi-University Training Contest 7 (快速幂+分块)

    原题地址 Sequence Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)T ...

  6. 【BZOJ-1009】GT考试 KMP+DP+矩阵乘法+快速幂

    1009: [HNOI2008]GT考试 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 2745  Solved: 1694[Submit][Statu ...

  7. BZOJ-1875 HH去散步 DP+矩阵乘法快速幂

    1875: [SDOI2009]HH去散步 Time Limit: 20 Sec Memory Limit: 64 MB Submit: 1196 Solved: 553 [Submit][Statu ...

  8. BZOJ-2326 数学作业 矩阵乘法快速幂+快速乘

    2326: [HNOI2011]数学作业 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1564 Solved: 910 [Submit][Statu ...

  9. BZOJ-2875 随机数生成器 矩阵乘法快速幂+快速乘

    题目没给全,吃X了... 2875: [Noi2012]随机数生成器 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 1479 Solved: 829 ...

随机推荐

  1. HyperLedger Fabric部署与链码解读

    1.Fabric简介 Fabric是超级账本中的一个项目,用以推进区块链技术.和其他区块链类似,它也有一个账本,使用智能合约,且是一个参与者可以分别管理自身交易的系统.它是一个联盟链.Fabric与其 ...

  2. 虚拟机下安装VM

    Linux(CentOS 7)命令行模式安装VMware Tools 详解 [日期:2017-05-02] 来源:Linux社区  作者:Linux [字体:大 中 小] 本篇文章主要介绍了如何在Li ...

  3. sessionStorage 的使用

    sessionStorage 的使用: sessionStorage.removeItem("data"); sessionStorage.getItem("data&q ...

  4. ORA-01075: you are currently logged on

    [root@hear01 ~]# su - oracle[oracle@hear01 ~]$ sqlplus "/as sysdba" SQL*Plus: Release 11.2 ...

  5. 【Codeforces576E_CF576E】Painting Edges(可撤销并查集+线段树分治)

    题目 CF576E 分析: 从前天早上肝到明天早上qwq其实颓了一上午MC ,自己瞎yy然后1A,写篇博客庆祝一下. 首先做这题之前推荐一道很相似的题:[BZOJ4025]二分图(可撤销并查集+线段树 ...

  6. Android:EditText属性大全

    一.inputType属性inputType属性在EditText输入值时启动的虚拟键盘的风格有着重要的作用.比如有时需要虚拟键盘只为字符或只为数字. <span style="fon ...

  7. Android webview js 调用java方法报错"Uncaught TypeError: Object [object Object] has no method xx

    webview开发,在Android4.4下js调用java方法报错"Uncaught TypeError: Object [object Object] has no method,同样的 ...

  8. 【LeetCode】-- 260. Single Number III

    问题描述: https://leetcode.com/problems/single-number-iii/ 在一个数组里面,只有两个元素仅出现过1次,其余都出现过两次.找出出现仅一次的那两个(a, ...

  9. Spring Cloud (10) Hystrix-监控面板

    Hystrix DashBoard 断路器是根据一段时间窗内的请求状况来判断并操作断路器的打开和关闭状态的.Hystrix Dashboard是作为断路器状态的一个组件,提供了数据监控和友好的图形化界 ...

  10. SQL Server 中4个系统数据库,Master、Model、Msdb、Tempdb。

    (1)Master数据库是SQL Server系统最重要的数据库,它记录了SQL Server系统的所有系统信息.这些系统信息包括所有的登录信息.系统设置信息.SQL Server的初始化信息和其他系 ...