POJ3735】的更多相关文章

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,交换操作就是暴力交换操作答案矩阵的两行,清空操作是将操作答案矩阵的对应行清零. 至于最后的将所有操作重复,将单次操…
题意:有n只猫咪,开始时每只猫咪有花生0颗,现有一组操作,由下面三个中的k个操作组成:        1. g i 给i只猫咪一颗花生米        2. e i 让第i只猫咪吃掉它拥有的所有花生米        3. s i j 将猫咪i与猫咪j的拥有的花生米交换        现将上述一组操作做m次后,问每只猫咪有多少颗花生? sol: 可参考Matrix67<十个利用矩阵乘法解决的经典题目> 定义初始矩阵A = [1 0 0 0],0号元素固定为1,1~n分别为对应的猫所拥有的花生数.…
Training little cats Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 9299   Accepted: 2230 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 th…
题意:有n只猫,对其进行k次操作,然后反复这样操作m次. 其中g 表示 i 猫加1, e表示 i 猫为0:s表示  i 与 j 猫互换. 解释一下样例: 3 1 6g 1g 2g 2s 1 2g 3e 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,哪一行加常数的作用. 偷一张图: 像这样!是不是就可以表…
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…
题目链接:http://poj.org/problem?id=3735 题目意思: 调教猫咪:有n只饥渴的猫咪,现有一组羞耻连续操作,由k个操作组成,全部选自: 1. g i 给第i只猫咪一颗花生 2. e i 让第i只猫咪吃光它的花生 3. s i j 交换猫咪i与猫咪j的花生 现将上述一组连续操作做m次后,求每只猫咪有多少颗花生? 思路:这道题难点在如何把这种奇怪的操作转化为矩阵操作,网络上看到一个画的很好的图,这里直接偷过来. 现在,对于每一个操作我们都可以得到一个转置矩阵,把k个操作的矩…
逛了一圈...觉得这篇讲的比较清楚:传送门~ 简要概括: 1.线性代数的知识,单位矩阵的利用:(如果不知道单位矩阵的,先去补习一下线代,做几题行列式就会了): 2.然后构造好矩阵以后,直接做M次乘积运算,然后利用一个[1, 0 , ... , 0 ]矩阵提取答案就好了,对,那个[1,0,..., 0 ] 就是获取答案的作用. PS 以前的矩阵快速幂总是这样写的:先构造一个矩阵,然后跑一发矩阵快速幂,然后这个矩阵a乘以另一个矩阵b就会得出答案,而答案矩阵往往会包括前一个答案的值.所以自己就有点不知…
题目:Training little cats 链接:http://poj.org/problem?id=3735 分析: 1)将操作用矩阵表示出来,然后快速幂优化. 2)初始矩阵:$ \left[ \begin{array}{ccccc} 1 & a_1 & a_2 & ... & a_n \end{array} \right] $ 构造一个$ (n+1)*(n+1) $ 的单位矩阵T. 得花生:将第0行中得到花生的那一列赋为1. $ \left[ \begin{arra…
题目链接:http://poj.org/problem?id=3735 解题思路: 先构造一个(n+1)*(n+1)的单位矩阵E,在此基础上进行操作: 1.g i     ------------->      E[0][i] ++; 2.s i j   -------------> for(int k=0;k<=n;k++)  swap(E[k][i],E[k][j]); 3.e i    -------------> for(int k=0;k<=n;k++) E[k][…
矩阵是干什么的呢?一句话来说就是,知道相邻两个函数的递推关系和第一个数,让你递推到第n个数.显然,如果n很大,那么一个一个递推过去是会超时的.所以矩阵就是用来解决这种快速递推的问题的. 比方说斐波那契数列就是一个递推的典型. 先丢题目链接:我是题目! 那么问题的关键就变成了如何找递推关系的中介矩阵temp了.如果题目告诉了你递推关系,题目就变得很简单了.但是告诉你递推关系大致可分为两类,一类是加法的递推,像斐波那契数列,temp矩阵的每个元素都是常数.另外一种,就是有乘法的递推关系了,这类关系一…