• [SDOI2010]猪国杀


    题面

    (这个做题面的大佬太赞啦)

    无聊啊~~~然后就写大模拟,然后就从早上写到下午,生活得到了极大的充实

    注意事项:

    牌库为空之后再抽牌,会重复抽最后一张被抽走牌

    无论在任何过程中,游戏结束(主公死或反贼全死),都中断游戏,直接进入输出阶段

    所有人一开始都知道主公的身份

    每个人都会无条件帮队友无懈掉决斗万箭南蛮

    每个人都会无条件无懈掉对手的无懈

    每个人都不会无懈掉队友的无懈

    玩家自己的出牌阶段,当玩家用完某一张牌之后,他会从头检索自己之前检索过的牌,看看他们是不是现在可以用了。

    反贼当然只会决斗主公啦~~~~

    忠臣被主公决斗并不能算跳忠

    没了

    代码:

      1 #include<cstdio>
      2 #include<cstring>
      3 #include<algorithm>
      4 #include<cmath>
      5 #include<cstdlib>
      6 using namespace std;
      7 struct Player{
      8     int cardsiz,Hp;
      9     char typ;
     10     char card[2010];
     11     bool eq;
     12 }player[20];
     13 char kn[11],Car_p[2010],sss[10];
     14 int nxt[20],las[20];
     15 int n,m,Fz;
     16 bool ed;
     17 void Input();
     18 void Work();
     19 void Output();
     20 void get_card(int );
     21 void Kil(int ,int );
     22 void JD(int ,int );
     23 void NMRQ(int );
     24 void WJQF(int );
     25 bool WXKJ(int ,int ,int );
     26 void JS(int ,int );
     27 int main()
     28 {
     29     Input();
     30     Work();
     31     Output();
     32     return 0;
     33 }
     34 void Input(){
     35     int i,j,k;
     36     scanf("%d%d",&n,&m);
     37     for(i=1;i<=n;i++)    nxt[i]=i+1,las[i]=i-1;
     38     nxt[n]=1,las[1]=n;
     39     for(i=1;i<=n;i++){
     40         for(j=1;j<2010;j++)    player[i].card[j]='U';
     41         scanf("%s",sss),player[i].typ=sss[0];
     42         for(j=1;j<=4;j++)    scanf("%s",sss),player[i].card[j]=sss[0];
     43         player[i].cardsiz=player[i].Hp=4;
     44         if(player[i].typ=='F')    Fz++;
     45         player[i].eq=false;
     46     }
     47     for(i=2;i<=n;i++)    kn[i]='U';
     48     kn[1]='M';
     49     for(i=1;i<=m;i++)
     50         scanf("%s",sss),Car_p[m-i+1]=sss[0];
     51 }
     52 void Work(){
     53     int i,j,k;
     54     char cad;
     55     ed=true;
     56     if(Fz)    ed=false;
     57     if(ed)    return ;
     58     for(i=1;i;i=nxt[i]){
     59         get_card(i),get_card(i);
     60         bool kill=true;
     61         for(j=1;j<=player[i].cardsiz;j++)
     62             if(player[i].card[j]!='U'){
     63                 if(!player[i].Hp)    break;
     64                 cad=player[i].card[j];
     65                 if(cad=='P'){
     66                     if(player[i].Hp!=4)
     67                         player[i].Hp++,player[i].card[j]='U';
     68                     continue;
     69                 }
     70                 if(cad=='K'){
     71                     if(!kill&&!player[i].eq)    continue;
     72                     if(player[i].typ=='M'&&kn[nxt[i]]!='L'&&kn[nxt[i]]!='F')    continue;
     73                     if(player[i].typ=='Z'&&kn[nxt[i]]!='F')    continue;
     74                     if(player[i].typ=='F'&&kn[nxt[i]]!='Z'&&kn[nxt[i]]!='M')    continue;
     75                     player[i].card[j]='U';
     76                     Kil(i,nxt[i]);
     77                     kn[i]=player[i].typ,kill=false;
     78                     if(ed)    return ;
     79                     continue;
     80                 }
     81                 if(cad=='F'){
     82                     if(player[i].typ=='F'){
     83                         player[i].card[j]='U',JD(i,1);
     84                         kn[i]=player[i].typ;
     85                         if(ed)    return ;
     86                         j=0;
     87                         continue;
     88                     }
     89                     for(k=nxt[i];k!=i;k=nxt[k])
     90                         if((player[i].typ=='M'&&(kn[k]=='L'||kn[k]=='F'))||(player[i].typ=='Z'&&kn[k]=='F')){
     91                             player[i].card[j]='U',JD(i,k);
     92                             kn[i]=player[i].typ;
     93                             if(ed)    return ;
     94                             j=0;
     95                             break;
     96                         }
     97                     continue;
     98                 }
     99                 if(cad=='N'){
    100                     player[i].card[j]='U';
    101                     NMRQ(i);
    102                     if(ed)    return ;
    103                     j=0;
    104                     continue;
    105                 }
    106                 if(cad=='W'){
    107                     player[i].card[j]='U';
    108                     WJQF(i);
    109                     if(ed)    return ;
    110                     j=0;
    111                     continue;
    112                 }
    113                 if(cad=='Z'){
    114                     player[i].eq=true;
    115                     player[i].card[j]='U';
    116                     j=0;
    117                     continue;
    118                 }
    119             }
    120     }
    121 }
    122 void Output(){
    123     int i,j;
    124     printf("%s",player[1].Hp<=0?"FP
    ":"MP
    ");
    125     for(i=1;i<=n;i++){
    126         if(player[i].Hp<=0)
    127             printf("DEAD
    ");
    128         else{
    129             for(j=1;j<=player[i].cardsiz;j++)
    130                 if(player[i].card[j]!='U')
    131                     printf("%c ",player[i].card[j]);
    132             printf("
    ");
    133         }
    134     }
    135 }
    136 void get_card(int x){
    137     if(!m)    m++;
    138     player[x].card[++player[x].cardsiz]=Car_p[m];
    139     m--;
    140 }
    141 void Kil(int ker,int ked){
    142     int i,j;
    143     for(i=1;i<=player[ked].cardsiz;i++)
    144         if(player[ked].card[i]=='D'){
    145             player[ked].card[i]='U';
    146             return ;
    147         }
    148     player[ked].Hp--;
    149     if(!player[ked].Hp)    JS(ker,ked);
    150 }
    151 void JD(int fucker,int fucked){
    152     int i,j,k;
    153     if(WXKJ(fucker,fucked,1))    return ;
    154     if(fucker==1&&player[fucked].typ=='Z'){
    155         player[fucked].Hp--;
    156         if(!player[fucked].Hp)    JS(fucker,fucked);
    157         return ;
    158     }
    159     j=k=1;
    160     while(1){
    161         while(player[fucked].card[j]!='K'&&j<=player[fucked].cardsiz)    j++;
    162         if(j>player[fucked].cardsiz){
    163             player[fucked].Hp--;
    164             if(!player[fucked].Hp)    JS(fucker,fucked);
    165             return ;
    166         }
    167         else
    168             player[fucked].card[j]='U';
    169         while(player[fucker].card[k]!='K'&&k<=player[fucker].cardsiz)    k++;
    170         if(k>player[fucker].cardsiz){
    171             player[fucker].Hp--;
    172             if(!player[fucker].Hp)    JS(fucked,fucker);
    173             return ;
    174         }
    175         else
    176             player[fucker].card[k]='U';
    177     }
    178 }
    179 void NMRQ(int user){
    180     int usto,i;
    181     for(usto=nxt[user];usto!=user;usto=nxt[usto])
    182         if(!WXKJ(user,usto,1)){
    183             for(i=1;i<=player[usto].cardsiz;i++)
    184                 if(player[usto].card[i]=='K'){
    185                     player[usto].card[i]='U';
    186                     break;
    187                 }
    188             if(i>player[usto].cardsiz){
    189                 player[usto].Hp--;
    190                 if(usto==1&&kn[user]=='U')    kn[user]='L';
    191                 if(!player[usto].Hp)    JS(user,usto);
    192                 if(ed)    return ;
    193             }
    194         }
    195 }
    196 void WJQF(int user){
    197     int usto,i;
    198     for(usto=nxt[user];usto!=user;usto=nxt[usto])
    199         if(!WXKJ(user,usto,1)){
    200             for(i=1;i<=player[usto].cardsiz;i++)
    201                 if(player[usto].card[i]=='D'){
    202                     player[usto].card[i]='U';
    203                     break;
    204                 }
    205             if(i>player[usto].cardsiz){
    206                 player[usto].Hp--;
    207                 if(usto==1&&kn[user]=='U')    kn[user]='L';
    208                 if(!player[usto].Hp)    JS(user,usto);
    209                 if(ed)    return ;
    210             }
    211         }
    212 }
    213 bool WXKJ(int user,int usto,int fl){
    214     int i=user,j,pd=fl?usto:user;
    215     i=user;
    216     while(1){
    217         if(fl==1){
    218             if(kn[usto]==player[i].typ||(kn[usto]=='M'&&player[i].typ=='Z')||(kn[usto]=='Z'&&player[i].typ=='M'))
    219                 for(j=1;j<=player[i].cardsiz;j++)
    220                     if(player[i].card[j]=='J'){
    221                         player[i].card[j]='U';
    222                         kn[i]=player[i].typ;
    223                         return !WXKJ(i,user,0);
    224                     }
    225         }
    226         else{
    227             if(((player[i].typ=='M'||player[i].typ=='Z')&&kn[user]=='F')||(player[i].typ=='F'&&(kn[user]=='M'||kn[user]=='Z')))
    228                 for(j=1;j<=player[i].cardsiz;j++)
    229                     if(player[i].card[j]=='J'){
    230                         player[i].card[j]='U';
    231                         kn[i]=player[i].typ;
    232                         return !WXKJ(i,user,0);
    233                     }
    234         }
    235         i=nxt[i];
    236         if(i==user)    break;
    237     }
    238     return false;
    239 }
    240 void JS(int ker,int ked){
    241     int i;
    242     for(i=1;i<=player[ked].cardsiz;i++)
    243         if(player[ked].card[i]=='P'){
    244             player[ked].card[i]='U';
    245             player[ked].Hp++;
    246             return ;
    247         }
    248     las[nxt[ked]]=las[ked];
    249     nxt[las[ked]]=nxt[ked];
    250     if(ked==1){
    251         ed=true;
    252         return ;
    253     }
    254     if(player[ked].typ=='F')
    255         Fz--;
    256     if(!Fz){
    257         ed=true;
    258         return ;
    259     }
    260     if(player[ked].typ=='F')
    261         get_card(ker),get_card(ker),get_card(ker);
    262     if(player[ked].typ=='Z'&&player[ker].typ=='M')
    263         player[ker].cardsiz=0,player[ker].eq=false;
    264 }
    View Code
  • 相关阅读:
    C#--带参SQL语句数通用数据访问类
    VS 2017产品密匙
    关于编码中的字符和字节问题
    关于C++中的cin用法
    C++基础(一、基本语法,Hello World)
    Oracle查看用户所在的表空间
    静态变量、枚举、以及静态代码块的使用场景
    Java 枚举(enum) 详解7种常见的用法
    第一章 对象和封装
    摘抄Java反射
  • 原文地址:https://www.cnblogs.com/nietzsche-oier/p/9093673.html
Copyright © 2020-2023  润新知