• csu 1898: 复盘拉火车


    1898: 复盘拉火车

            Time Limit: 1 Sec     Memory Limit: 128 Mb     Submitted: 114     Solved: 36    


    Description

    小GJ和小XS没事做用扑克牌玩起了小时候的拉火车游戏。规则如下,GJ和XS交替依次把手中的牌放到桌面上,由于GJ年长,所以他总是先放。桌面上会构成一个新的序列,当这个序列中新放入的点数与以前存在的某个点数重复的时候,这两张重复的牌和中间的牌就依次全部放回所放牌一方的序列尾部。 例如桌面上有牌A 10 2 3 5此时GJ放下一张2则桌面上剩下A 10而2 3 5 2这个序列放到GJ原本手中牌序列的尾部。

    Input

    有T(T<=20)组数据。 每组第一行给出GJ目前手中牌的数量N1(N1<=100)和这个手牌序列的点数各是多少 (点数可能为 A 2 3 4 5 6 7 8 9 10 J Q K) 第二行给出XS目前手中牌的数量N2(N2<=100)和这个手牌序列的点数各是多少 第三行给出一个数字K,问进行K(K<=2xN1 且 K<=2xN2)次放牌后,桌面上的序列和两个人的手牌序列是怎样的。

    Output

    每组数据给出3行输出,桌面上的扑克序列,小GJ的手牌序列和小XS的手牌序列。具体格式见样例。 每组数据后加空行间隔。

    Sample Input

    2
    10 A 2 3 4 5 6 7 8 9 10
    5 2 2 3 4 5
    5
    5 2 2 2 2 5
    5 A 3 4 J K
    10
    

    Sample Output

    Deck: A 2 3
    GJ: 4 5 6 7 8 9 10 2 2
    XS: 3 4 5
    
    Deck: 3 J 5 K
    GJ: 2 A 2 2 4 2
    XS:
    

    Hint

    Source

    中南大学第十一届大学生程序设计竞赛

    Author

    OTTFF

    题解:完完全全的模拟题

      1 #include<iostream>
      2 #include<string>
      3 #include<cstdio>
      4 #include<stack>
      5 #include<map>
      6 #include<algorithm>
      7 using namespace std;
      8 char a[5000],b[5000],c[500];
      9 map<char,int>mp;
     10 int main()
     11 {
     12 
     13     int n;
     14     scanf("%d",&n);
     15     int num1,num2,k;
     16     int r1,r2,r3;
     17     while(n--)
     18     {
     19         r1=r2=r3=0;
     20         char ch;
     21         scanf("%d",&num1);
     22         for(int i=0;i<num1;++i)
     23         {
     24             getchar();
     25             scanf("%c",&a[i]);
     26             if(a[i]=='1')scanf("%c",&ch);
     27             mp[a[i]]=-1;
     28         }
     29         scanf("%d",&num2);
     30         for(int i=0;i<num2;++i)
     31         {
     32             getchar();
     33             scanf("%c",&b[i]);
     34             if(b[i]=='1')scanf("%c",&ch);
     35             mp[b[i]]=-1;
     36         }
     37         scanf("%d",&k);
     38 
     39         for(int i=0;i<k;++i)
     40         {
     41             if(!(i%2))
     42             {
     43               //  printf("GJ放牌:");
     44                 if(mp[a[r1]]==-1)
     45                 {
     46                    // printf("无牌可收
    ");
     47                    mp[a[r1]]=r3;
     48                    c[r3++]=a[r1];
     49                 }
     50                 else{
     51                    //  printf("%d有牌可收
    ",mp[a[r1]]);
     52                    c[r3++]=a[r1];
     53                    int rk=r3;
     54                    r3=mp[a[r1]];
     55                    for(int j=mp[a[r1]];j<rk;++j)
     56                    {
     57                        a[num1++]=c[j];
     58                        mp[c[j]]=-1;
     59                    }
     60 
     61                 }
     62                 r1++;
     63             }
     64             else
     65             {
     66                // printf("XS放牌:");
     67                  if(mp[b[r2]]==-1)
     68                 {
     69                    //  printf("无牌可收
    ");
     70                    mp[b[r2]]=r3;
     71                    c[r3++]=b[r2];
     72                 }
     73                 else{
     74                     //  printf("%d有牌可收
    ",mp[b[r2]]);
     75                    c[r3++]=b[r2];
     76                    int rr=r3;
     77                    r3=mp[b[r2]];
     78                    for(int j=mp[b[r2]];j<rr;++j)
     79                    {
     80                        b[num2++]=c[j];
     81                          mp[c[j]]=-1;
     82                    }
     83                 }
     84                 r2++;
     85             }
     86         }
     87         printf("Deck:");
     88         for(int i=0;i<r3;++i)
     89         {
     90             printf(" %c",c[i]);
     91             if(c[i]=='1')printf("0");
     92         }
     93         printf("
    GJ:");
     94         for(int i=r1;i<num1;++i)
     95         {
     96             printf(" %c",a[i]);
     97             if(a[i]=='1')printf("0");
     98         }
     99         printf("
    XS:");
    100         for(int i=r2;i<num2;++i)
    101         {
    102             printf(" %c",b[i]);
    103             if(b[i]=='1')printf("0");
    104         }printf("
    ");
    105            printf("
    ");
    106     }
    107     return 0;
    108 }
  • 相关阅读:
    ubuntu安装-Docker(zz)
    vpp编译
    dpdk编译
    通过P4runtime进行解耦
    run p4 in mininet
    搭建基于Open vSwitch的VxLAN隧道实zz
    路由协议
    dNOS from AT&T
    《Java程序设计》实验一 Java开发环境的熟悉
    《Java程序设计》第五周学习总结
  • 原文地址:https://www.cnblogs.com/52why/p/7461456.html
Copyright © 2020-2023  润新知