2023/1/8 造字程式

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='')

相關文章