知道了怎么置换之后,就可以用矩阵来置换了,但这道题一直关于置换的地方读不明白。

#include <iostream>
#include <cstdio>
#include <algorithm> using namespace std; const int Maxn=100;
int pn[Maxn],xn[Maxn],bn[Maxn];
int ansp[Maxn];
char str[Maxn];
struct Matrax {
int m[Maxn][Maxn];
};
int n,m;
Matrax per,a; void initial(){
memset(per.m,0,sizeof(per.m));
for(int i=0;i<n;i++){
per.m[i][i]=1;
}
memset(a.m,0,sizeof(a.m));
for(int i=0;i<n;i++)
a.m[pn[i]][i]=1;
} Matrax multi(Matrax ae,Matrax b){
Matrax c;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
c.m[i][j]=0;
for(int k=0;k<n;k++){
c.m[i][j]+=ae.m[i][k]*b.m[k][j];
}
}
}
return c;
} Matrax quick(int k){
Matrax ans=per;
Matrax p=a;
while(k){
if(k&1){
ans=multi(ans,p);
}
k=k>>1;
p=multi(p,p);
}
return ans;
} int main(){
while(scanf("%d%d",&n,&m)!=EOF){
if(n==0&&m==0) break;
for(int i=0;i<n;i++){
scanf("%d",&bn[i]);
bn[i]--;
xn[i]=i;
}
for(int i=0;i<n;i++) //为什么要加这个,我想不明白,只好跟着别人加了
pn[bn[i]]=i;
getchar();
gets(str);
initial();
Matrax ans=quick(m);
for(int i=0;i<n;i++){
ansp[i]=0;
for(int k=0;k<n;k++)
ansp[i]+=xn[k]*ans.m[k][i];
}
for(int i=0;i<n;i++)
cout<<str[ansp[i]];
cout<<endl;
}
return 0;
}

  

最新文章

  1. CLR via C# 3rd - 05 - Primitive, Reference, and Value Types
  2. Ubuntu实现wifi热点
  3. 【前端】Sublime text3 插件LiveReload 实现实时预览
  4. 自己用反射写的一个request.getParameter工具类
  5. URAL 2046 A - The First Day at School 模拟题
  6. linux下eclipse的安装
  7. Esper系列(五)Order by、Limit、构建事件流、Updating an Insert Stream
  8. 26、Jquery 基础
  9. mac os使用lsusb命令和连接未知的Android设备
  10. 201521123098 《Java程序设计》第14周学习总结
  11. 任务执行器——Executor
  12. 【安富莱专题教程第4期】SEGGER的J-Scope波形上位机软件,HSS模式简单易用,无需额外资源,也不需要写目标板代码
  13. 从零开始学安全(三十一)●kali 输入 msfconsole 启动报错
  14. 【APIO2018】铁人两项(圆方树,动态规划)
  15. [Vue warn]: Cannot find element: #main
  16. nyoj1273 河南省第九届省赛_&quot;宣传墙&quot;、状压DP+矩阵幂加速
  17. iOS 的音频播放
  18. sysbench基准测试工具使用
  19. linux 系统启动
  20. burp实时获取token

热门文章

  1. Android常用的一些make命令【转】
  2. JDBC基础01
  3. mysqls,为node.js而编写的sql语句生成插件 (crud for mysql).
  4. Prism学习(1)---前期准备
  5. Kinect+OpenNI+OpenCV使用
  6. 创建一个dynamics CRM workflow (一) - Introduction to Custom Workflows
  7. Centos 7 安装图形化界面
  8. JS 封装一个对数组去重的函数
  9. JS 用+1、-1填12()34()56()78()9=59
  10. git 教程2 (git常用命令解说)