POJ 3735 Training little cats】的更多相关文章

题目传送门 /* 题意:k次操作,g:i猫+1, e:i猫eat,s:swap 矩阵快速幂:写个转置矩阵,将k次操作写在第0行,定义A = {1,0, 0, 0...}除了第一个外其他是猫的初始值 自己讲太麻烦了,网上有人讲的很清楚,膜拜之 详细解释:http://www.cppblog.com/y346491470/articles/157284.html */ #include <cstdio> #include <cstring> #include <cmath>…
Training little cats Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 9613   Accepted: 2296 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…
Training little cats Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 13488   Accepted: 3335 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…
Training little cats Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 11787 Accepted: 2892 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 c…
http://poj.org/problem?id=3735 大致题意: 有n仅仅猫,開始时每仅仅猫有花生0颗,现有一组操作,由以下三个中的k个操作组成: 1. g i 给i仅仅猫一颗花生米 2. e i 让第i仅仅猫吃掉它拥有的全部花生米 3. s i j 将猫i与猫j的拥有的花生米交换 现将上述一组操作循环m次后,问每仅仅猫有多少颗花生? 非常明显,要先构造矩阵.构造一个(n+1)*(n+1)的矩阵a,初始化为单位矩阵. g i : a[i][n+1] += 1; e i : a[i][j]…
[题目链接] http://poj.org/problem?id=3735 [题目大意] 有一排小猫,给出一系列操作,包括给一只猫一颗花生, 让某只猫吃完所有的花生以及交换两只猫的花生, 求完成m次操作集合之后每只猫的花生数量 [题解] 创建一个1*(n+1)的初始矩阵, 对于给第i只猫一个花生就相当于乘上修改了A[0][i]的单位矩阵 如给第一只猫一个花生就修改A[0][1]为1 得到: 1 1 0 0 0 1 0 0 0 0 1 0 0 0 0 1 然后我们用初始矩阵去乘这个矩阵,就完成了加…
http://poj.org/problem?id=3735 给定一串操作,要这个操作连续执行m次后,最后剩下的值. 记矩阵T为一次操作后的值,那么T^m就是执行m次的值了.(其实这个还不太理解,但是数据一相乘,就是ans) 构造一个0--n的单位矩阵,用第0行作为各个猫的值,这样的话,用A={1,0,0,0}一乘就是每个毛的ans. 构造单位矩阵的意义就是他们矩阵自己相乘的时候,能够保留自己的值. 这个矩阵很分散,0的那些可以特判掉不枚举多一程O(n)了.这需要你的矩阵乘法是一个一个加上去的,…
题意 维护一个向量, 有三种操作 将第\(i\)个数加1 将第\(i\)个数置0 交换第\(i\)个数和第\(j\)个数 Solution 矩阵乘法/快速幂 Implementation 我们将向量写成列向量的形式. 为了支持+1操作需要将向量加一维, 这一维始终是1. 有一个坑: 当若干个转移矩阵\(A_1, A_2, \dots, A_n\)(方阵)依次作用于某个向量时, 这些向量的合向量\(B\)应当写成 \[B=A_n\cdot A_{n-1} \cdot \dots \cdot A_{…
题目链接 题意:有n个猫,开始的时候每个猫都没有坚果,进行k次操作,g x表示给第x个猫一个坚果,e x表示第x个猫吃掉所有坚果,s x y表示第x个猫和第y个猫交换所有坚果,将k次操作重复进行m轮,问最后这n个猫各自有多少坚果. 题解:构造(n+1)*(n+1)的单位矩阵,data[i][j]表示第i个猫与第j个猫进行交换,最后一列的前n项就是每个猫的坚果数目,s操作就交换对应行,矩阵快速幂时间复杂度O(n^3*log2(m))会超时,我们注意到在n*n的范围内每一行只有一个1,利用稀疏矩阵的…
题目 矩阵快速幂,这里的模版就是计算A^n的,A为矩阵. 之前的矩阵快速幂貌似还是个更通用一些. 下面的题目解释来自 我只想做一个努力的人 @@@请注意 ,单位矩阵最初构造 行和列都要是(猫咪数+1)!!!然后按照分析的来,分析中矩阵的下标都是从0开始的. 无法理解的可自行构造案例的矩阵进行验证. 注意一些细节,有些数据要用64位,不然会wa. //可能是因为原本的模版不适用 #include<stdio.h> #include<string.h> #include<algo…