百年工程今日开工

                              原题题面
防止本宝宝突然……
决定实时更新到cnblog上

或者说,请个大佬斧正

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cstring>
using namespace std;
struct pig{
    int pupil;//表示猪型,-1反,0主,1忠。
    char paid[110];//表示手牌。
    int num_paid;//表示现持有的牌数。
    void dust_paid()//整理手牌 
    {
        int cnt=0;
        for(int i=1;i<=num_paid;i++)
          if(paid[i]!=0) paid[++cnt]=paid[i];
        return ;
    }
    int alive;//剩余血量。
    int jump;//-1 跳反,0未跳,1跳忠。
    bool like_enemy;//是否为类反猪。
    bool equip;//是否装备诸葛连弩。 
//    int num_kill;//
    int num_dodge;////    int num_fight;//决斗 
//    int num_peach;//
    int num_none;//无懈可击 数量 
    int alive_before;//前一头活着的猪 
    int alive_next;//下一头活着的猪 

    void debug()
    {
        printf("class: %d Hp:  %d   num_paid:  %d  \n",pupil,alive,num_paid);
        printf("手牌:\n        ");
        for(int i=1;i<=num_paid;i++) printf("%c ",paid[i]);
        printf("\n跳反(-1反,0无,1忠):   %d   \n类反猪:   %d   \n武器:   %d   \n",jump,like_enemy,equip);
        printf("无懈可击数:   %d  \n闪数:  %d  \n",num_none,num_dodge);
        printf("上家:   %d        下家:   %d      \n",alive_before,alive_next);
        return ;
    }

}pig[110];

int n,m;
char opt;
int mp;//主猪编号.
int num_f;//反猪个数。 
char pid[10010];
int num_pid;//目前抽到哪张牌? 

void start()//开始 
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
    {
        pig[i].alive=4;
        scanf("%c%c",&opt,&opt);
//        printf("%c ",opt);
        if(opt=='M') pig[i].pupil=0,mp=i;
        else if(opt=='Z') pig[i].pupil=1;
        else if(opt=='F') pig[i].pupil=-1,num_f++;
//        printf("%d ",pig[i].pupil);
        scanf("%c",&opt);
        for(int j=1;j<=4;j++)
        {
            scanf("%c%c",&opt,&opt);
//            printf("%c ",opt);
            pig[i].paid[++pig[i].num_paid]=opt;
            if(opt=='J') pig[i].num_none++;
            else if(opt=='D') pig[i].num_dodge++;
        }
        pig[i].alive_before=i-1;
        pig[i].alive_next=i+1;
//        puts("");
    }
    pig[1].alive_before=n;
    pig[n].alive_next=1;
    for(int i=1;i<=m;i++) scanf("%c%c",&opt,&opt),pid[i]=opt;
//    for(int i=1;i<=m;i++) printf("%c ",opt);
//    puts("");
    return ;
}

bool end()//判断是否结束。 
{
    if(num_f==0){puts("MP");return true;}
    else if(pig[mp].alive==0) {puts("FP");return true;}
    return false;
}

void print_ans()//输出结果。 
{
    for(int i=1;i<=n;i++,puts(""))
    {
        if(pig[i].alive==0) {printf("DEAD");continue;}
        pig[i].dust_paid();
        for(int j=1;j<=pig[i].num_paid;j++) printf("%c ",pig[i].paid[j]);
    }
    return ;
}

void get_card(int i)//第i只猪摸牌。 
{
    pig[i].paid[++pig[i].num_paid]=num_pid==m?pid[m]:pid[++num_pid];
    pig[i].paid[++pig[i].num_paid]=num_pid==m?pid[m]:pid[++num_pid];    
    return ;
}
void action(int x)//第i只猪开始行动 
{
    bool attack=false;
    if(!pig[x].alive) return ;
    get_card(x);
    for(int i=1;i=pig[i].num_paid;i++)
    {
        int ch=pig[x].paid[i];
        if(ch==0) continue;
        //如果是空牌就过。 
        else if(pig[x].alive<4&&pig[x].paid[i]=='P') pig[x].paid[i]=0,pig[x].alive++;
        //如果血量没满且有桃。 
        else if(pig[x].paid[i]=='Z') pig[x].equip=true,pig[x].paid[i]=0,i=1;
        //如果是诸葛连弩,装上,从头扫。 
        else if(pig[x].paid[i]=='D') continue;
        //如果是闪就过。 
        else if(pig[x].paid[i]=='K') 
        //如果是杀,且有第一击杀目标。 
        {            
            //判断能不能杀。 
            if(!pig[x].equip)
            {
                
            }    
        }
    }
}

int main()
{
    start();
//    for(int i=1;i<=n;i++,puts(""),puts(""))
//    printf("%d:\n",i),pig[i].debug();
//    printf("牌堆:\n       ");
//    for(int i=1;i<=m;i++) printf("%c ",pid[i]);

    return 0;
}
/*
3 10
MP D D F F
ZP N N N D
FP J J J J
F F D D J J F F K D
*/

猜你喜欢

转载自www.cnblogs.com/cn-suqingnian/p/9094708.html