HDU 2371
2024-09-07 22:31:38
知道了怎么置换之后,就可以用矩阵来置换了,但这道题一直关于置换的地方读不明白。
#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;
}
最新文章
- CLR via C# 3rd - 05 - Primitive, Reference, and Value Types
- Ubuntu实现wifi热点
- 【前端】Sublime text3 插件LiveReload 实现实时预览
- 自己用反射写的一个request.getParameter工具类
- URAL 2046 A - The First Day at School 模拟题
- linux下eclipse的安装
- Esper系列(五)Order by、Limit、构建事件流、Updating an Insert Stream
- 26、Jquery 基础
- mac os使用lsusb命令和连接未知的Android设备
- 201521123098 《Java程序设计》第14周学习总结
- 任务执行器——Executor
- 【安富莱专题教程第4期】SEGGER的J-Scope波形上位机软件,HSS模式简单易用,无需额外资源,也不需要写目标板代码
- 从零开始学安全(三十一)●kali 输入 msfconsole 启动报错
- 【APIO2018】铁人两项(圆方树,动态规划)
- [Vue warn]: Cannot find element: #main
- nyoj1273 河南省第九届省赛_";宣传墙";、状压DP+矩阵幂加速
- iOS 的音频播放
- sysbench基准测试工具使用
- linux 系统启动
- burp实时获取token
热门文章
- Android常用的一些make命令【转】
- JDBC基础01
- mysqls,为node.js而编写的sql语句生成插件 (crud for mysql).
- Prism学习(1)---前期准备
- Kinect+OpenNI+OpenCV使用
- 创建一个dynamics CRM workflow (一) - Introduction to Custom Workflows
- Centos 7 安装图形化界面
- JS 封装一个对数组去重的函数
- JS 用+1、-1填12()34()56()78()9=59
- git 教程2 (git常用命令解说)