POJ3735
题目链接: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][i]=0;
上面的这一个部分本来我是构造多个单位矩阵,在单位矩阵上进行操作的,操作后的矩阵相乘的结果就是总的操作,结果就是一个TLE。。。后来改成这样才AC了。
然后再构造一个矩阵A,A只有左上角为1,其他的都为0。操作m次,其实就是A*(E^m)。矩阵快速幂,上!
AC代码:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long ll;
const int maxn=;
struct Matrix{
ll mat[maxn][maxn];
};
Matrix Multiply(Matrix x,Matrix y,int n){
Matrix temp;
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
temp.mat[i][j]=;
for(int k=;k<=n;k++){
if(x.mat[i][k]&&y.mat[k][j]) //没有这个优化TLE
temp.mat[i][j]+=(x.mat[i][k]*y.mat[k][j]);
}
}
}
return temp;
}
Matrix Fast_Power(Matrix a,int m,int n){
Matrix res;
for(int i=;i<=n;i++){
for(int j=i;j<=n;j++){
if(i==j) res.mat[i][j]=;
else res.mat[i][j]=res.mat[j][i]=;
}
}
while(m){
if(m&) res=Multiply(res,a,n);
m>>=;
a=Multiply(a,a,n);
}
return res;
} int main(){
Matrix rt;
int n,m,k,a,b;
char t[];
while(scanf("%d%d%d",&n,&m,&k)==&&(n||m||k)){
for(int i=;i<=n;i++){
for(int j=i;j<=n;j++){
if(i==j) rt.mat[i][j]=;
else rt.mat[i][j]=rt.mat[j][i]=;
}
}//构造出一个(n+1)*(n+1)的单位矩阵
while(k--){
scanf("%s",t);
if(t[]=='g'){
scanf("%d",&a);
rt.mat[][a]++;
}
else if(t[]=='e'){
scanf("%d",&a);
for(int i=;i<=n;i++)
rt.mat[i][a]=;
}
else{
scanf("%d %d",&a,&b);
for(int i=;i<=n;i++){
if(rt.mat[i][a]||rt.mat[i][b])
swap(rt.mat[i][a],rt.mat[i][b]);
}
}
}
if(m==){
for(int i=;i<n;i++){
if(i!=) printf(" ");
printf("");
}
}
else{
Matrix t;
memset(t.mat,,sizeof(t));
t.mat[][]=;
Matrix ret=Multiply(t,Fast_Power(rt,m,n),n);
for(int i=;i<=n;i++){
if(i!=) printf(" ");
printf("%lld",ret.mat[][i]);
}
}
printf("\n");
}
return ;
}
POJ3735的更多相关文章
- [poj3735] Training little cats_矩乘快速幂
Training little cats poj-3735 题目大意:给你n个数,k个操作,将所有操作重复m次. 注释:三种操作,将第i个盒子+1,交换两个盒子中的个数,将一个盒子清空.$1\le m ...
- POJ3735 矩阵
题意:有n只猫咪,开始时每只猫咪有花生0颗,现有一组操作,由下面三个中的k个操作组成: 1. g i 给i只猫咪一颗花生米 2. e i 让第i只猫咪吃掉它拥有的所有花生米 ...
- Training little cats poj3735
Training little cats Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9299 Accepted: 2 ...
- xiaowuga poj3735—Training little cats(特殊操作转化为矩阵操作)
题意:有n只猫,对其进行k次操作,然后反复这样操作m次. 其中g 表示 i 猫加1, e表示 i 猫为0:s表示 i 与 j 猫互换. 解释一下样例: 3 1 6g 1g 2g 2s 1 2g 3e ...
- Training little cats(poj3735,矩阵快速幂)
Training little cats Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10737 Accepted: ...
- poj3735—Training little cats(特殊操作转化为矩阵操作)
题目链接:http://poj.org/problem?id=3735 题目意思: 调教猫咪:有n只饥渴的猫咪,现有一组羞耻连续操作,由k个操作组成,全部选自: 1. g i 给第i只猫咪一颗花生 2 ...
- POJ3735【矩阵快速幂】
逛了一圈...觉得这篇讲的比较清楚:传送门~ 简要概括: 1.线性代数的知识,单位矩阵的利用:(如果不知道单位矩阵的,先去补习一下线代,做几题行列式就会了): 2.然后构造好矩阵以后,直接做M次乘积运 ...
- [POJ3735]Training little cats
题目:Training little cats 链接:http://poj.org/problem?id=3735 分析: 1)将操作用矩阵表示出来,然后快速幂优化. 2)初始矩阵:$ \left[ ...
- ACM之路(18)—— 矩阵
矩阵是干什么的呢?一句话来说就是,知道相邻两个函数的递推关系和第一个数,让你递推到第n个数.显然,如果n很大,那么一个一个递推过去是会超时的.所以矩阵就是用来解决这种快速递推的问题的. 比方说斐波那契 ...
随机推荐
- HDU 1159.Common Subsequence【动态规划DP】
Problem Description A subsequence of a given sequence is the given sequence with some elements (poss ...
- LeetCode 25. K 个一组翻转链表 | Python
25. K 个一组翻转链表 题目来源:https://leetcode-cn.com/problems/reverse-nodes-in-k-group 题目 给你一个链表,每 k 个节点一组进行翻转 ...
- IoTClient开发6 - S7-200SmarTcp协议客户端实现
环境和工具 服务端电脑IP:192.168.1.130 客户端电脑IP:192.168.1.120 1.在服务端电脑运行IoTClientTool 2.运行Wireshark 3.在客户端电脑运行Io ...
- [Abp vNext 入坑分享] - 5.全局异常替换
一.简要说明 [项目源码] [章节目录] 前面我们已经初步完成了框架的功能了,jwt的也已经接入完成了. 现在需要进行全局异常的接入了,abpvnext官方本来就有了全局异常的模块了,介绍链接 ...
- 无线脉冲水表LoRaWAN方案芯片ASR6500S
无线脉冲水表LoRaWAN方案 物联网是新一代信息技术的重要组成部分,也是"信息化"时代的重要发展阶段,在物联网飞速发展的今天,只有多技术融合的物联网解决方案才能够在不同的应用场景 ...
- java基础篇 之 位运算符
按位操作符 按位操作符用来操作基本数据类型中的单个"比特"(bit),即二进制位.按位操作符会对两个参数中对应的位执行布尔代数运算,并最终生成一个结果. 我们常用的按位操作 ...
- mac下xampp使用phpmyadmin搭建后台
情景 使用xampp搭建一个后端环境,前提已经有后端和数据库配置文件 安装和启动xampp 安装xampp没什么可说的,在https://www.apachefriends.org/index.htm ...
- 201771010113 李婷华 《面向对象程序设计(Java)》第八周总结
一.理论知识部分 1.Java为了克服单继承的缺点,Java使用了接口,一个类可以实现一个或多个接口. 2.在Java程序设计语言中,接口不是类,而是对类的一组需求描述,由常量和一组抽象方法组成.接口 ...
- Spring 循环引用(三)源码深入分析版
@ 目录 前言 正文 分析 doGetBean 为什么Prototype不可以 createBean doCreateBean getEarlyBeanReference getSingleton b ...
- Qt子窗口设置背景色只能应用到其中的部件的问题
问题描述:设置父窗口后子窗口会嵌在父窗口中,背景变透明,此时用qss设置子窗口的背景色发现只应用到的子窗口的控件中,除控件外的地方并没有应用到背景色. 解决方法:不使用qss设置背景色,重写paint ...