[SDOI2010]猪国杀
Posted Der Barde, Nietzsche
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[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 }
以上是关于[SDOI2010]猪国杀的主要内容,如果未能解决你的问题,请参考以下文章