Bzoj1972: [Sdoi2010]猪国杀 题解(大模拟+耐心+细心)
题目可真长,读题都要一个小时。
1.对于无懈可击使用,是对那张无懈可击的使用者表敌意,身份显现。并且符合敌人的敌人就是朋友的性质。
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
#include <cmath>
#include <map>
#include <set>
#define N 15
#define M 2105
#define tao 1
#define sha 2
#define shan 3
#define jue 4
#define man 5
#define wan 6
#define wu 7
#define nu 8
using namespace std;
int pre[N],fro[N],n,m,zz;
int st[M],top;
struct pi
{
int ip;
int jump;
int q[M],en,hea,hp;
bool ln;
}pig[N];
char bbb[];
int check(char x)
{
if(x=='P') return tao;
else if(x=='K') return sha;
else if(x=='D') return shan;
else if(x=='F') return jue;
else if(x=='N') return man;
else if(x=='W') return wan;
else if(x=='J') return wu;
else return nu;
}
void get_pok(int x,int js)
{
if(js==)return;
if(!top) top=;
pig[x].en++;
pig[x].q[pig[x].en]=st[top];
top--;
get_pok(x,js+);
}
void zl(int x)
{
for(int j=pig[x].hea;j<=pig[x].en;j++)
{
if(pig[x].q[j]!=)
{
pig[x].hea=j;
for(int k=pig[x].en;k>=pig[x].hea;k--)
{
if(pig[x].q[k]!=)
{
pig[x].en=k;
break;
}
}
break;
}
if(j==pig[x].en)
{
pig[x].en=;
pig[x].hea=pig[x].en+;
}
}
}
void come_to_end(int x)
{
if(x==) printf("MP\n");
else printf("FP\n");
int js=;
for(int i=;i<=n;i++) if(pig[i].hp) js++;
for(int i=;i<=n;i++)
{
if(pig[i].hp==) printf("DEAD\n");
else
{
zl(i);
for(int j=pig[i].hea;j<pig[i].en;j++)
{
if(!pig[i].q[j])continue;
int y=pig[i].q[j];
if(y==tao)printf("P ");
else if(y==sha)printf("K ");
else if(y==shan)printf("D ");
else if(y==nu) printf("Z ");
else if(y==jue) printf("F ");
else if(y==man) printf("N ");
else if(y==wan) printf("W ");
else if(y==wu) printf("J ");
}
int y=pig[i].q[pig[i].en];
if(y==tao)printf("P");
else if(y==sha)printf("K");
else if(y==shan)printf("D");
else if(y==nu) printf("Z");
else if(y==jue) printf("F");
else if(y==man) printf("N");
else if(y==wan) printf("W");
else if(y==wu) printf("J");
printf("\n");
}
}
exit();
}
void gua(int x,int from)
{
pre[fro[x]]=pre[x];
fro[pre[x]]=fro[x];
if(x==) come_to_end();
int now=fro[];
bool yx=;
while(now!=)
{
if(pig[now].ip==)
{
yx=;
break;
}
now=fro[now];
}
if(yx)come_to_end();
if(pig[x].ip==&&pig[from].ip==)
{
memset(pig[from].q,,sizeof(pig[from].q));
pig[from].ln=;
pig[from].hea=,pig[from].en=;
}
else if(pig[x].ip==)
{
get_pok(from,);
}
}
void lost(int x,int from)
{
if(pig[x].hp==)
{
for(int i=pig[x].hea;i<=pig[x].en;i++)
{
if(pig[x].q[i]==tao)
{
pig[x].hp++;
pig[x].q[i]=;
zl(x);
return ;
}
}
gua(x,from);
}
}
void kill(int x)
{
int to=fro[x];
bool yx=;
for(int i=pig[to].hea;i<=pig[to].en;i++)
{
if(pig[to].q[i]==shan)
{
pig[to].q[i]=;
yx=;
zl(to);
break;
}
}
if(yx)
{
pig[to].hp--;
lost(to,x);
}
}
bool use_wu(int x)
{
int now=fro[x];
while(now!=x)
{
if((pig[now].ip==&&pig[x].jump!=)||(pig[now].ip!=&&pig[x].jump==))
{
for(int i=pig[now].hea;i<=pig[now].en;i++)
{
if(pig[now].q[i]==wu)
{
pig[now].q[i]=;
if(pig[now].ip==)pig[now].jump=;
else if(pig[now].ip==) pig[now].jump=;
zl(now);
if(use_wu(now)) return ;
else return ;
}
}
}
now=fro[now];
}
return ;
}
void come_to_fight(int x,int y)
{
int now=fro[x];
if(pig[y].jump&&pig[y].jump!=-)
{
while(now!=x)
{
if((pig[now].ip==&&pig[y].jump==)||(pig[y].jump!=&&pig[now].ip!=))
{
bool yx=;
for(int i=pig[now].hea;i<=pig[now].en;i++)
{
if(pig[now].q[i]==wu)
{
pig[now].q[i]=;
if(pig[now].ip==)pig[now].jump=;
else if(pig[now].ip==) pig[now].jump=;
zl(now);
yx=;
if(use_wu(now))return;
}
}
if(!yx)break;
}
now=fro[now];
}
}
if(pig[x].ip==&&pig[y].ip==)
{
pig[y].hp--;
lost(y,x);
return;
}
int js1=,js2=;
for(int i=pig[x].hea;i<=pig[x].en;i++)
{
if(pig[x].q[i]==sha)
{
js1++;
}
}
for(int i=pig[y].hea;i<=pig[y].en;i++)
{
if(pig[y].q[i]==sha)
{
js2++;
}
}
if(js1<js2)
{
int js3=;
for(int i=pig[y].hea;i<=pig[y].en;i++)
{
if(pig[y].q[i]==sha)
{
js3++;
pig[y].q[i]=;
if(js3==js1+)break;
}
}
for(int i=pig[x].hea;i<=pig[x].en;i++)
{
if(pig[x].q[i]==sha)
{
pig[x].q[i]=;
}
}
zl(x),zl(y);
pig[x].hp--;
lost(x,y);
}
else
{
int js3=;
for(int i=pig[x].hea;i<=pig[x].en;i++)
{
if(pig[x].q[i]==sha)
{
if(js3==js2)break;
js3++;
pig[x].q[i]=;
}
}
for(int i=pig[y].hea;i<=pig[y].en;i++)
{
if(pig[y].q[i]==sha)
pig[y].q[i]=;
}
zl(x),zl(y);
pig[y].hp--;
lost(y,x);
}
}
void nanman(int x)
{
int now=fro[x];
while(now!=x)
{
if(pig[now].jump&&pig[now].jump!=-)
{
bool yx2=;
int now2=x;
bool yxxx=;
while(now2!=x||yxxx)
{
yxxx=;
if((pig[now2].ip==&&pig[now].jump==)||(pig[now2].ip!=&&pig[now].jump!=))
{
bool yx=;
for(int i=pig[now2].hea;i<=pig[now2].en;i++)
{
if(pig[now2].q[i]==wu)
{
pig[now2].q[i]=;
if(pig[now2].ip==)pig[now2].jump=;
else if(pig[now2].ip==) pig[now2].jump=;
zl(now2);
yx=;
if(use_wu(now2))
{
yx2=;
break;
}
else break;
}
}
if(!yx)break;
}
if(yx2)break;
now2=fro[now2];
}
if(yx2)
{
now=fro[now];continue;
}
}
bool yx=;
for(int i=pig[now].hea;i<=pig[now].en;i++)
{
if(pig[now].q[i]==sha)
{
pig[now].q[i]=;
zl(now);
yx=;
break;
}
}
if(yx)
{
pig[now].hp--;
if(now==&&!pig[x].jump)pig[x].jump=-;
lost(now,x);
}
now=fro[now];
}
}
void wanjian(int x)
{
int now=fro[x];
while(now!=x)
{
if(pig[now].jump&&pig[now].jump!=-)
{
bool yx2=;
int now2=x;
bool yxxx=;
while((now2!=x)||yxxx)
{
yxxx=;
if((pig[now2].ip==&&pig[now].jump==)||(pig[now2].ip!=&&pig[now].jump!=))
{
bool yx=;
for(int i=pig[now2].hea;i<=pig[now2].en;i++)
{
if(pig[now2].q[i]==wu)
{
pig[now2].q[i]=;
if(pig[now2].ip==)pig[now2].jump=;
else if(pig[now2].ip==) pig[now2].jump=;
zl(now2);
yx=;
if(use_wu(now2))
{
yx2=;
break;
}
else break;
}
}
if(!yx)break;
}
if(yx2)break;
now2=fro[now2];
}
if(yx2)
{
now=fro[now];continue;
}
}
bool yx=;
for(int i=pig[now].hea;i<=pig[now].en;i++)
{
if(pig[now].q[i]==shan)
{ pig[now].q[i]=;
zl(now);
yx=;
break;
}
}
if(yx)
{
pig[now].hp--;
if(now==&&!pig[x].jump)pig[x].jump=-;
lost(now,x);
}
now=fro[now];
}
}
void second_stage(int x,int js)
{
for(int i=pig[x].hea;i<=pig[x].en;i++)
{
if(!pig[x].q[i]||pig[x].q[i]==shan||pig[x].q[i]==wu||(pig[x].q[i]==sha&&js&&!pig[x].ln))continue;
if(pig[x].hp!=&&pig[x].q[i]==tao)
{
pig[x].hp++;
pig[x].q[i]=;
zl(x);
second_stage(x,js);
return;
}
else if(pig[x].q[i]==sha)
{
if(pig[x].ip==&&pig[fro[x]].jump&&pig[fro[x]].jump!=)
{
pig[x].q[i]=; zl(x);
kill(x);
second_stage(x,js+);
return;
}
else if(pig[x].ip==&&pig[fro[x]].jump==)
{
pig[x].jump=;
pig[x].q[i]=; zl(x);
kill(x);
second_stage(x,js+);
return;
}
else if(pig[x].ip==&&(pig[fro[x]].jump==||pig[fro[x]].jump==))
{ pig[x].jump=;
pig[x].q[i]=; zl(x);
kill(x);
second_stage(x,js+);
return;
}
}
else if(pig[x].q[i]==nu)
{
pig[x].q[i]=;
pig[x].ln=;
zl(x);
second_stage(x,js);
return;
}
else if(pig[x].q[i]==jue)
{
if(pig[x].ip==)
{
int now=fro[];
while(now!=)
{
if(pig[now].jump==-||pig[now].jump==)
{
pig[x].q[i]=;
zl(x);
come_to_fight(x,now);
if(pig[x].hp==)return;
second_stage(x,js);
return;
break;
}
now=fro[now];
}
}
else if(pig[x].ip==)
{
int now=fro[x];
while(now!=x)
{
if(pig[now].jump==)
{
pig[x].q[i]=;
zl(x);
pig[x].jump=;
come_to_fight(x,now);
if(pig[x].hp==)return;
second_stage(x,js);
return;
break;
}
now=fro[now];
}
}
else
{
pig[x].jump=;
pig[x].q[i]=;
zl(x);
come_to_fight(x,);
if(pig[x].hp==)return;
second_stage(x,js);
return;
}
}
else if(pig[x].q[i]==man)
{
pig[x].q[i]=;
zl(x);
nanman(x);
second_stage(x,js);
return;
}
else if(pig[x].q[i]==wan)
{
pig[x].q[i]=;
zl(x);
wanjian(x);
second_stage(x,js);
return;
}
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
{
pre[i]=i-;
fro[i]=i+;
pig[i].hp=;
scanf("%s",bbb);
if(bbb[]=='M')pig[i].jump=pig[i].ip=;
else if(bbb[]=='Z') pig[i].ip=;
else pig[i].ip=;
pig[i].hea=;
for(int j=;j<=;j++)
{
scanf("%s",bbb);
pig[i].en++;
pig[i].q[pig[i].en]=check(bbb[]);
}
}
pre[]=n;
fro[n]=;
top=m;
for(int i=;i<=m;i++)
{
scanf("%s",bbb);
st[top-i+]=check(bbb[]);
}
int now=;
while()
{
get_pok(now,);
second_stage(now,);
now=fro[now];
}
return ;
}
无注释版代码
虽然博主打了五百多行,但主要还是因为博主码风剽悍,别急着放弃。一会就能打完。
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
#include <cmath>
#include <map>
#include <set>
#define N 15
#define M 2105
#define tao 1
#define sha 2
#define shan 3
#define jue 4
#define man 5
#define wan 6
#define wu 7
#define nu 8
using namespace std;
int pre[N],fro[N],n,m;
int st[M],top;//牌堆,注意为0时一直摸最后一张牌
struct pi
{
int ip;//身份
int jump;//是否跳反/忠
int q[M],en,hea,hp;//血量
bool ln;//是否有连弩
}pig[N];
char bbb[];
void print()//输出每一只猪的血量,身份,是否跳身份
{
for(int i=;i<=n;i++)
{
cout<<pig[i].hp<<' '<<pig[i].ip<<' '<<pig[i].jump<<endl;
}
cout<<endl;
}
void print2()//输出场上有哪些玩家存活
{
int now=;bool yx=;
while(now!=||yx)
{
yx=;
cout<<now<<' ';
now=fro[now];
}
cout<<endl;
}
void show(int x)//展示手牌
{
for(int i=pig[x].hea;i<=pig[x].en;i++)
{
if(pig[x].q[i])
{
cout<<pig[x].q[i]<<' ';
}
}
cout<<endl<<endl;
}
int check(char x)
{
if(x=='P') return tao;
else if(x=='K') return sha;
else if(x=='D') return shan;
else if(x=='F') return jue;
else if(x=='N') return man;
else if(x=='W') return wan;
else if(x=='J') return wu;
else return nu;
}
void get_pok(int x,int js)//第x只猪摸的第js张牌
{
if(js==)return;
if(!top) top=;
pig[x].en++;
pig[x].q[pig[x].en]=st[top];
top--;
get_pok(x,js+);
}
void zl(int x)//整理玩家x手中的牌
{
for(int j=pig[x].hea;j<=pig[x].en;j++)
{
if(pig[x].q[j]!=)
{
pig[x].hea=j;
for(int k=pig[x].en;k>=pig[x].hea;k--)
{
if(pig[x].q[k]!=)
{
pig[x].en=k;
break;
}
}
break;
}
if(j==pig[x].en)
{
pig[x].en=;
pig[x].hea=pig[x].en+;
}
}
}
void come_to_end(int x)//一切都结束了
{
if(x==)
printf("MP\n");
else
printf("FP\n");
int js=;
for(int i=;i<=n;i++)
if(pig[i].hp)js++;
for(int i=;i<=n;i++)
{
if(pig[i].hp==) printf("DEAD\n");
else
{
zl(i);
for(int j=pig[i].hea;j<pig[i].en;j++)
{
if(!pig[i].q[j])continue;
int y=pig[i].q[j];
if(y==tao)printf("P ");
else if(y==sha)printf("K ");
else if(y==shan)printf("D ");
else if(y==nu) printf("Z ");
else if(y==jue) printf("F ");
else if(y==man) printf("N ");
else if(y==wan) printf("W ");
else if(y==wu) printf("J ");
}
int y=pig[i].q[pig[i].en];
if(y==tao)printf("P");
else if(y==sha)printf("K");
else if(y==shan)printf("D");
else if(y==nu) printf("Z");
else if(y==jue) printf("F");
else if(y==man) printf("N");
else if(y==wan) printf("W");
else if(y==wu) printf("J");
printf("\n");
}
}
exit();
}
void gua(int x,int from)//被from打挂了
{
cout<<from<<"has killed "<<x<<endl;
pre[fro[x]]=pre[x];
fro[pre[x]]=fro[x];
if(x==) come_to_end();
int now=fro[];
bool yx=;
while(now!=)
{
if(pig[now].ip==)
{
yx=;
break;
}
now=fro[now];
}
if(yx)come_to_end();
if(pig[x].ip==&&pig[from].ip==)
{
memset(pig[from].q,,sizeof(pig[from].q));
pig[from].ln=;
pig[from].hea=,pig[from].en=;
}
else if(pig[x].ip==)
get_pok(from,);
}
void lost(int x,int from)//检查是否死透
{
if(pig[x].hp==)
{
for(int i=pig[x].hea;i<=pig[x].en;i++)
{
if(pig[x].q[i]==tao)
{
pig[x].hp++;
pig[x].q[i]=;
zl(x);
return ;
}
}
gua(x,from);
}
}
void kill(int x)//x对下家出杀
{
int to=fro[x];
cout<<x<<" hit "<<to<<endl;
bool yx=;
for(int i=pig[to].hea;i<=pig[to].en;i++)
{
if(pig[to].q[i]==shan)
{
pig[to].q[i]=;
yx=;
zl(to);
break;
}
}
if(yx)
{
cout<<to<<"is hurt!"<<endl;
pig[to].hp--;
lost(to,x);
}
}
bool use_wu(int x)//x使用无懈是否成功
{
int now=fro[x];
while(now!=x)
{
if((pig[now].ip==&&pig[x].jump!=)||(pig[now].ip!=&&pig[x].jump==))
{
for(int i=pig[now].hea;i<=pig[now].en;i++)
{
if(pig[now].q[i]==wu)
{
pig[now].q[i]=;
if(pig[now].ip==)pig[now].jump=;
else if(pig[now].ip==) pig[now].jump=;
zl(now);
if(use_wu(now)) return ;
else return ;
}
}
}
now=fro[now];
}
return ;
}
void come_to_fight(int x,int y)//x对y决斗
{
cout<<x<<"want to fight with "<<y<<endl;
int now=fro[x];
if(pig[y].jump&&pig[y].jump!=-)
{
while(now!=x)
{
if((pig[now].ip==&&pig[y].jump==)||(pig[y].jump!=&&pig[now].ip!=))
{
bool yx=;
for(int i=pig[now].hea;i<=pig[now].en;i++)
{
if(pig[now].q[i]==wu)
{
pig[now].q[i]=;
if(pig[now].ip==)pig[now].jump=;
else if(pig[now].ip==) pig[now].jump=;
zl(now);
yx=;
if(use_wu(now))return;
}
}
if(!yx)break;
}
now=fro[now];
}
}
if(pig[x].ip==&&pig[y].ip==)
{
pig[y].hp--;
lost(y,x);
return;
}
int js1=,js2=;
for(int i=pig[x].hea;i<=pig[x].en;i++)
if(pig[x].q[i]==sha)js1++;
for(int i=pig[y].hea;i<=pig[y].en;i++)
if(pig[y].q[i]==sha) js2++;
if(js1<js2)
{
int js3=;
for(int i=pig[y].hea;i<=pig[y].en;i++)
{
if(pig[y].q[i]==sha)
{
js3++;
pig[y].q[i]=;
if(js3==js1+)break;
}
}
for(int i=pig[x].hea;i<=pig[x].en;i++)
{
if(pig[x].q[i]==sha)
{
pig[x].q[i]=;
}
}
zl(x),zl(y);
pig[x].hp--;
lost(x,y);
cout<<x<<"failed!"<<endl;
}
else
{
int js3=;
for(int i=pig[x].hea;i<=pig[x].en;i++)
{
if(pig[x].q[i]==sha)
{
if(js3==js2)break;
js3++;
pig[x].q[i]=;
}
}
for(int i=pig[y].hea;i<=pig[y].en;i++)
{
if(pig[y].q[i]==sha)
pig[y].q[i]=;
}
zl(x),zl(y);
pig[y].hp--;
lost(y,x);
cout<<y<<"failed!"<<endl;
}
}
void nanman(int x) //南蛮入侵
{
cout<<"everyone need to give up a K or you will hurt by "<<x<<endl;
int now=fro[x];
while(now!=x)
{
if(pig[now].jump&&pig[now].jump!=-)
{
bool yx2=;
int now2=x;
bool yxxx=;
while(now2!=x||yxxx)
{
yxxx=;
if((pig[now2].ip==&&pig[now].jump==)||(pig[now2].ip!=&&pig[now].jump!=))
{
bool yx=;
for(int i=pig[now2].hea;i<=pig[now2].en;i++)
{
if(pig[now2].q[i]==wu)
{
pig[now2].q[i]=;
if(pig[now2].ip==)pig[now2].jump=;
else if(pig[now2].ip==) pig[now2].jump=;
zl(now2);
yx=;
if(use_wu(now2))
{
yx2=;
break;
}
else break;
}
}
if(!yx)break;
}
if(yx2)break;
now2=fro[now2];
}
if(yx2)
{
now=fro[now];continue;
}
}
bool yx=;
for(int i=pig[now].hea;i<=pig[now].en;i++)
{
if(pig[now].q[i]==sha)
{
pig[now].q[i]=;
zl(now);
yx=;
break;
}
}
if(yx)
{
pig[now].hp--;
if(now==&&!pig[x].jump)pig[x].jump=-;
lost(now,x);
}
now=fro[now];
}
}
void wanjian(int x) //万箭齐发
{
cout<<"everyone need to give up a D or you will hurt by "<<x<<endl;
int now=fro[x];
while(now!=x)
{
if(pig[now].jump&&pig[now].jump!=-)
{
bool yx2=;
int now2=x;
bool yxxx=;
while((now2!=x)||yxxx)
{
yxxx=;
if((pig[now2].ip==&&pig[now].jump==)||(pig[now2].ip!=&&pig[now].jump!=))
{
bool yx=;
for(int i=pig[now2].hea;i<=pig[now2].en;i++)
{
if(pig[now2].q[i]==wu)
{
pig[now2].q[i]=;
if(pig[now2].ip==)pig[now2].jump=;
else if(pig[now2].ip==) pig[now2].jump=;
zl(now2);
yx=;
if(use_wu(now2))
{
yx2=;
break;
}
else break;
}
}
if(!yx)break;
}
if(yx2)break;
now2=fro[now2];
}
if(yx2)
{
now=fro[now];continue;
}
}
bool yx=;
for(int i=pig[now].hea;i<=pig[now].en;i++)
{
if(pig[now].q[i]==shan)
{ pig[now].q[i]=;
zl(now);
yx=;
break;
}
}
if(yx)
{
pig[now].hp--;
if(now==&&!pig[x].jump)pig[x].jump=-;
lost(now,x);
}
now=fro[now];
}
}
void second_stage(int x,int js) //出牌阶段,出了几张杀
{
cout<<x<<' '<<js<<endl;
print();
for(int i=pig[x].hea;i<=pig[x].en;i++)
{
if(!pig[x].q[i]||pig[x].q[i]==shan||pig[x].q[i]==wu||(pig[x].q[i]==sha&&js&&!pig[x].ln))continue;
if(pig[x].hp!=&&pig[x].q[i]==tao)
{
cout<<x<<"come back to life"<<endl;
pig[x].hp++;
pig[x].q[i]=;
zl(x);
second_stage(x,js);
return;
}
else if(pig[x].q[i]==sha)
{
if(pig[x].ip==&&pig[fro[x]].jump&&pig[fro[x]].jump!=)
{
pig[x].q[i]=; zl(x);
kill(x);
second_stage(x,js+);
return;
}
else if(pig[x].ip==&&pig[fro[x]].jump==)
{
pig[x].jump=;
pig[x].q[i]=; zl(x);
kill(x);
second_stage(x,js+);
return;
}
else if(pig[x].ip==&&(pig[fro[x]].jump==||pig[fro[x]].jump==))
{
pig[x].jump=;
pig[x].q[i]=; zl(x);
kill(x);
second_stage(x,js+);
return;
}
}
else if(pig[x].q[i]==nu)
{
pig[x].q[i]=;
pig[x].ln=;
zl(x);
second_stage(x,js);
return;
}
else if(pig[x].q[i]==jue)
{
if(pig[x].ip==)
{
int now=fro[];
while(now!=)
{
if(pig[now].jump==-||pig[now].jump==)
{
pig[x].q[i]=;
zl(x);
come_to_fight(x,now);
if(pig[x].hp==)return;
second_stage(x,js);
return;
break;
}
now=fro[now];
}
}
else if(pig[x].ip==)
{
int now=fro[x];
while(now!=x)
{
if(pig[now].jump==)
{
pig[x].q[i]=;
zl(x);
pig[x].jump=;
come_to_fight(x,now);
if(pig[x].hp==)return;
second_stage(x,js);
return;
break;
}
now=fro[now];
}
}
else
{
pig[x].jump=;
pig[x].q[i]=;
zl(x);
come_to_fight(x,);
if(pig[x].hp==)return;
second_stage(x,js);
return;
}
}
else if(pig[x].q[i]==man)
{
pig[x].q[i]=;
zl(x);
nanman(x);
second_stage(x,js);
return;
}
else if(pig[x].q[i]==wan)
{
pig[x].q[i]=;
zl(x);
wanjian(x);
second_stage(x,js);
return;
}
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
{
pre[i]=i-;
fro[i]=i+;
pig[i].hp=;
scanf("%s",bbb);
if(bbb[]=='M')pig[i].jump=pig[i].ip=;//主公
else if(bbb[]=='Z') pig[i].ip=;//忠臣
else pig[i].ip=;//反贼
pig[i].hea=;
for(int j=;j<=;j++)
{
scanf("%s",bbb);
pig[i].en++;
pig[i].q[pig[i].en]=check(bbb[]);
}
}
pre[]=n;
fro[n]=;
top=m;
for(int i=;i<=m;i++)
{
scanf("%s",bbb);
st[top-i+]=check(bbb[]);
}
int now=;
while()
{
get_pok(now,);//当前猪摸牌
second_stage(now,);
now=fro[now];
}
return ;
}
/*3 4
MP J J K N
ZP J D K W
FP P N P K
J J K W 3 1
MP D N F K
ZP F W F N
FP D N N D
K 5 10
MP W D F K
ZP N N D D
FP F W W K
ZP K K N D
FP K D P W
J K W K D N N K J N 3 10
MP W D J W
ZP J P D N
FP N D F F
J D N N F J J D K W 3 6
MP W J J D
FP N F F K
ZP J J F F
P P K K F W
*/
带注释代码(附带小样例)
由于博主十分中二,请不要嘲笑样例游戏解说般的画风。
Bzoj1972: [Sdoi2010]猪国杀 题解(大模拟+耐心+细心)的更多相关文章
- 洛谷 P2482 loj #2885 [SDOI2010]猪国杀 题解【模拟】【贪心】【搜索】
好玩的模拟题. 以后要经常写模拟题鸭 题目描述 游戏背景 <猪国杀>是一种多猪牌类回合制游戏,一共有\(3\)种角色:主猪,忠猪,反猪.每局游戏主猪有且只有\(1\)只,忠猪和反猪可以有多 ...
- 洛谷P2482 [SDOI2010]猪国杀——题解
猪国杀,模拟题的一颗耀眼的明珠,成长大牛.锻炼码力必写题! 模拟题没什么思维难度.只要按部就班地去做就是.模拟简单在这,难也在这.因为题面巨长,条件巨多,忽疏一点都有可能全盘皆输.故推荐考试时碰见了, ...
- 【SDOI2010】猪国杀 题解(模拟)
前言:嗅到了一丝头秃的味道…… ------------------ 题目链接 题目实在太长,变量也很多.建议至少读个三五遍再做题.不要忽略任何细节,不要想当然.(因为真正玩三国杀肯定不像猪一样出牌啊 ...
- BZOJ1972:[SDOI2010]猪国杀(模拟)
Description 太长就不贴过来了 Solution 这个题是真的不难写……唯一的难度就在于理解题意上面……感觉这就是个阅读理解题啊…… 而且你三国杀玩的越多可能就越难写因为你无法理解那些猪的思 ...
- BZOJ1972: [Sdoi2010]猪国杀
“此题注意样例少了个J,且牌堆可能用完牌,若牌用完则不停取最后一张”.——hzwer 然后直接模拟,认真读题,理清思路. #include<cstdio> #include<list ...
- Luogu2482 [SDOI2010]猪国杀 ---- 模拟
Luogu2482 [SDOI2010]猪国杀 题意 ...... https://www.luogu.org/problemnew/show/P2482 总结 首先说一下代码的构思: 首先确定了所有 ...
- [BZOJ 1972][Sdoi2010]猪国杀
1972: [Sdoi2010]猪国杀 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 364 Solved: 204[Submit][Status][D ...
- 【BZOJ1972】[SDOI2010] 猪国杀(恶心的大模拟)
点此看题面 大致题意: 让你模拟一个游戏猪国杀的过程. 几大坑点 对于这种模拟题,具体思路就不讲了,就说说有哪些坑点. 题面有锅,反猪是\(FP\). 数据有锅,牌堆中的牌可能不够用,牌堆为空之后需一 ...
- BZOJ1972:[SDOI2010]猪国杀
我对模拟的理解:https://www.cnblogs.com/AKMer/p/9064018.html 题目传送门:https://www.lydsy.com/JudgeOnline/problem ...
随机推荐
- [WPF疑难] 如何限定ListView列宽度
原文:[WPF疑难] 如何限定ListView列宽度 [WPF疑难] 如何限定ListView列宽度 周银辉 今天 ...
- window 10 64bit Tortoise SVN 图标状态显示不正常
https://www.cnblogs.com/lzpong/p/6187366.html 根据以上帖子处理 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows ...
- WPF使用NAudio录音
代码: using NAudio.Wave; using System.Windows; namespace NAudioDemo { /// <summary> /// MainWind ...
- 毕设(二)C#SerialPort
毕业设计中,用到串口与无人机通信,所以就用到了SerialPort这个类,这个类在设置属性时, 用到最主要的属性应该是COM口和波特率,由于本人不熟悉硬件,不便多说,但经验告诉我是这样的, 还有数据位 ...
- chrome 仿手机
很多网站都通过User-Agent来判断浏览器类型,如果是3G手机,显示手机页面内容,如果是普通浏览器,显示普通网页内容. 谷歌Chrome浏览器,可以很方便地用来当3G手机模拟器.在Windows的 ...
- 桌面程序阻止Windows关机(使用Message.Result取得DefWindowProc API函数的返回值,非常重要)
Windows Client 客户端在关机,不外乎两种情况: 1. 没有处理 Windows 关机消息: 2.处理了关机消息,但是超时了: 上面这两种情况,都会让Windows 关不了机.在现实生活中 ...
- Qt第三方圆形进度条-及其改进
Qt第三方圆形进度条的改进 要实现一个圆形的进度条功能,在网上找到一个比较出名的第三方封装类:QRoundProgressBar,地址:sourceforge 的 QRoundProgressBar ...
- CL_GUI_ALV_GRID 触发PAI事件(Application event)
*&---------------------------------------------------------------------* *& Report Z_BARRY_A ...
- 使用fastjson读取超巨json文件引起的GC问题
项目中需要将巨量数据生成的json文件解析,并写入数据库,使用了 alibaba 的 fastjson,在实践过程中遇到了 GC 问题,记录如下: 数据大约为70万条,文件大小在3~4G左右,使用 f ...
- Hadoop初步学习
我们老板理解的大数据是,从数据到知识的转化.大数据目前的应用如 支付宝金融大数据.腾讯出行大数据等. 大数据的工作就是从海量数据源中筛选,梳理对自己有用的数据,整合成合适的数据结构,存储并进行可视化. ...