问题标题: 7333 打掼蛋

0
0
已解决
熊潇然
熊潇然
初级启示者
初级启示者

7333 打掼蛋

经验值:1200 时间限制:1000毫秒 内存限制:128MB

题目描述 Deion

新年到了,小明家开始准备做饭,做饭的人很多了。刚好家里有个扑克牌洗牌机所以小明就想和几个亲戚朋友打掼蛋来休闲一下。
每副扑克牌有54张,拆开一副新牌时,发现扑克牌顺序是黑桃从 1 到 13(K),红桃从 1 到 13(K),梅花从 1 到 13(K),方片从 1 到 13(K),小王,大王。
打掼蛋需要2副扑克牌,但大家觉得牌太多了,所以就打算使用一副扑克牌。
一副新牌的顺序:
黑桃 B1 ~ B13;
红桃 R1 ~ R13;
梅花 F1 ~ F13;
方片 S1 ~ S13
小王 W1,大王 W2
洗牌机其实是有规律,给出一个 1∼54 的乱序数列表示洗牌规则,第 M 个的数字是 N,表示第 M 张洗牌后换到为第 N 个位置。

例如:有4张牌,B4,R3,F11,S8,规则是{3,1,4,2}:
第一次洗完:R3,S8,B4,F11
第二次洗完:S8,F11,R3,B4

输入描述 Input Deion

第一行一个整数 C ,表示共洗牌几次。
第二行 1∼54 的数列,表示每次洗牌的规则。

输出描述 Output Deion

一行,表示经过 C 次洗牌后的扑克牌顺序,每张牌用花色+数字组成。

样例输入 Sample Input

9

1 11 2 30 9 40 54 13 49 26 25 17 47 24 50 52 28 23 45 37 15 22 46 16 18 10 53 51 6 19 27 33 21 32 14 44 39 7 12 3 42 29 5 41 4 20 43 36 8 35 48 31 38 34

样例输出 Sample Output

S1 D9 D12 D6 D8 H4 C9 S9 D4 H13 C10 S2 D10 S7 C1 C8 S11 D2 C4 S6 C5 H9 D3 J2 D5 S10 H8 H12 S12 S4 C7 H3 D13 H11 C12 D7 D1 D11 S3 C2 C11 C13 S13 H7 H6 C3 S8 H10 S5 J1 H5 C6 H2 H1

数据范围及提示 Data Size & Hint

C≤20

 

#include<bits/stdc++.h>
#define N 54
using namespace std;
int n,a[60];
string s[60]={"","B1","B2","B3","B4","B5","B6","B7","B8","B9","B10","B11","B12","B13","R1","R2","R3","R4","R5","R6","R7","R8","R9","R10","R11","R12","R13","F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12","F13","S1","S2","S3","S4","S5","S6","S7","S8","S9","S10","S11","S12","S13","W1","W2"};
void f1(int idx){
    string t=s[idx];
    for(int i=idx;i<a[idx];i++){
        s[i]=s[i+1];
    }
    s[a[idx]]=t;
}
void f2(int idx){
    string t=s[idx];
    for(int i=idx;i>a[idx];i--){
        s[i]=s[i-1];
    }
    s[a[idx]]=t;
}
void f(){
    for(int i=1;i<=N;i++){
        if(i<a[i]){
            f1(i);
        }else if(i>a[i]){
            f2(i);
        }
    }
}
int main(){
    cin>>n;         
    for(int i=1;i<=N;i++){
        cin>>a[i];
    }
    while(n--){
        f();
    }
    for(int i=1;i<=N;i++){
        cout<<s[i]<<' ';
    }
    return 0;
}

样例都没过

方便你们复制代码,板块我就改成 代码分享 了


0
0
0
0
我要回答