[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\n":"MP\n");
125     for(i=1;i<=n;i++){
126         if(player[i].Hp<=0)
127             printf("DEAD\n");
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("\n");
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

 

posted @ 2018-05-26 17:24  F.W.Nietzsche  阅读(2212)  评论(2编辑  收藏  举报