2023.1.10 PM 09:00 by CBJ
來源 : https://zerojudge.tw/ShowProblem?problemid=j606 出題者 : 2023年1月APCS 標籤 : 字串(陣列)處理 難易度 : 1
解題想法 : 依照題目敘述實作即可。 1~k 的排列,實際上對應的是 index 0~k-1,因此我們可以在輸入時就先將每個數字預先 - 1,會方便很多。 由於 C++/Python 的字串是無法更改值的,所以可以直接將讀入的字串轉成陣列型態,會較容易實作。
//C language
#include<stdio.h>
int main(){
int k,q,r;
scanf("%d%d%d",&k,&q,&r);
char str[k];
scanf("%s",str);
int p[k];
char tmp[k], ans[q][k];
for(int i=0;i<q;i++){
for(int j=0;j<k;j++) scanf("%d",&p[j]);
for(int j=0;j<k;j++) p[j]--;
for(int pi=0;pi<k;pi++) tmp[p[pi]]=str[pi];
for(int j=0;j<k;j++) ans[i][j]=tmp[j];
for(int j=0;j<k;j++) str[j]=tmp[j];
}
for(int i=0;i<r;i++){
for(int j=0;j<q;j++){
printf("%c",ans[j][i]);
}
printf("\n");
}
return 0;
}

//C++ language
#include<iostream>
#include<vector>
using namespace std;
int main(){
int k,q,r; cin>>k>>q>>r;
vector<char>str(k);
for(char &c: str) cin>>c;
vector<int>p(k);
vector<char>tmp(k);
vector<vector<char>>ans;
for(int i=0;i<q;i++){
for(int j=0;j<k;j++) cin>>p[j];
for(int j=0;j<k;j++) p[j]--;
for(int pi=0;pi<p.size();pi++) tmp[p[pi]]=str[pi];
ans.push_back(tmp);
for(int j=0;j<k;j++) str[j]=tmp[j];
}
for(int i=0;i<r;i++){
for(vector<char>v: ans) cout<<v[i];
cout<<"\n";
}
return 0;
}

## Python language
k,q,r=map(int,input().split())
string=[x for x in input()]
ans=[]
for i in range(q):
p=[int(x)-1 for x in input().split()]
tmp=['_']*len(p)
for pi in range(len(p)):
tmp[p[pi]]=string[pi]
ans.append(tmp)
string=tmp
for i in range(r):
output=[x[i] for x in ans]
print(*output,sep='')
