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 ...
随机推荐
- Interactive Data Display如何显示菜单?
貌似直接跟其它控件一样添加菜单就行了. 不过这个版本已经取消了默认菜单,所有的菜单功能都得自己去实现.
- mysq练习(二)
Mysql练习(二) 1. delete,drop,truncate 的区别? 可以参考这位的: https://www.cnblogs.com/zhizhao/p/7825469.html 2. ...
- MyCat的初步了解
MyCat 1 开源数据库中间件 MyCat 如今随着互联网的发展,数据的量级也是撑指数的增长,从GB到TB到PB.对数据的各种操作也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数据 ...
- 电脑睡眠状态(ACPI规范定义了七个状态,使用powercfg -a进行查看)
ACPI规范定义了一台兼容ACPI的计算机系统可以有以下七个状态(所谓的全局状态): G0('S0)正常工作状态:计算机的正常工作状态-操作系统和应用程序都在运行.CPU(s)执行指令.在这个状态下( ...
- CoolFormat(Qt Creator也可管理VC的Project)
http://download.csdn.net/download/akof1314/8457593 https://github.com/akof1314/CoolFormat http://dow ...
- LockWindowUpdate
//锁住listview防止反复刷新 LockWindowUpdate(Self.lvsearch.Handle); 貌似不太行,多用几下就卡住了 那个函数几乎不用 ...
- Qt自定义委托在QTableView中绘制控件、图片、文字(内容比较全)
自定义委托,继承于,QStyledItemDelegate类,重载Paint()函数, 1.实现在QTableView中绘制 格式字符串 2.实现在QTableView中绘制进度条 3.实现在QTab ...
- Qt使用第三方库3rdparty
简述 在 Qt 中经常会用到第三方库,例如:FFmpeg.OpenCV 等.第三方库的使用比较简单,只需要一些基本的配置就可以搞定,一起来看看吧! 简述 第三方库 源代码 库文件 目标目录 第三方库 ...
- 任何一件事,如果你不投入时间和精力去驯养,就不可能产生真正的兴趣和热爱(Focus Feedback FixIt的原理) good
这两本书和我们说的兴趣结合起来,为我们指明了精进的道路: 选择一个你感兴趣的方向 刻意练习 持续投入时间和精力 所谓刻意练习,简单说就是“3F”,即: Focus Feedback Fix it Fo ...
- PNG透明窗体全攻略(控件不透明)
http://blog.csdn.net/riklin/article/details/4417247 看好了,这是XP系统,未装.net.我的Photoshop学的不太好,把玻璃片弄的太透了些,如果 ...