社区讨论
求大佬指出错因(70分了)
P2482[SDOI2010] 猪国杀参与者 9已保存回复 8
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 8 条
- 当前快照
- 1 份
- 快照标识符
- @lo8o1td2
- 此快照首次捕获于
- 2023/10/27 21:45 2 年前
- 此快照最后确认于
- 2023/10/27 21:45 2 年前
CPP
#include<bits/stdc++.h>
using namespace std;
struct renwu
{
int character,health,l,r;
char card[2001];
queue<int>d,j;
bool jump,z,k,fakeJump;
}a[11];
int n,m,f,now,sum;
char cardForever;
bool b[11],youxijieshu;
void getCard(int o)
{
if(sum==m+4*n)
{
a[o].r++;
a[o].card[a[o].r]=cardForever;
return ;
}
char c;
cin>>c;
sum++;
if(sum==m+4*n)
{
cardForever=c;
}
a[o].r++;
if(c=='D')
{
a[o].d.push(a[o].r);
}
if(c=='J')
{
a[o].j.push(a[o].r);
}
a[o].card[a[o].r]=c;
}
void dead(int o,int p)
{
for(int i=1;i<=a[p].r;i++)
{
if(a[p].card[i]=='P')
{
a[p].card[i]='0';
a[p].health++;
return ;
}
}
if(a[p].character==3)
{
f--;
if(f==0)
{
b[p]=0;
return ;
}
for(int i=1;i<=3;i++)
{
getCard(o);
}
}
if(a[o].character==1&&a[p].character==2)
{
a[o].l=a[o].r=0;
a[o].z=0;
}
b[p]=0;
}
bool nothingToBreak(int o,int p,bool q)
{
int k=o;
do
{
if(b[k]==0||q==1&&!((a[k].character==1&&a[p].character==2)||(a[p].character==1&&a[k].character==2)||a[k].character==a[p].character)||q==0&&((a[k].character==1&&a[p].character==2)||(a[p].character==1&&a[k].character==2)||a[k].character==a[p].character))
{
k++;
if(k>n)
{
k=1;
}
if(k==o)
{
break;
}
continue;
}
if(!a[k].j.empty())
{
a[k].card[a[k].j.front()]='0';
a[k].j.pop();
a[k].jump=1;
if(!nothingToBreak(k,p,!q))
{
return 1;
}
}
k++;
if(k>n)
{
k=1;
}
}while(k!=o);
return 0;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
string s;
cin>>s;
if(s[0]=='M')
{
a[i].character=1;
}
if(s[0]=='Z')
{
a[i].character=2;
}
if(s[0]=='F')
{
a[i].character=3;
f++;
}
for(int j=1;j<=4;j++)
{
getCard(i);
}
b[i]=1;
a[i].health=4;
a[i].l=1;
}
a[1].jump=1;
now=0;
while(b[1]&&f>0)
{
now++;
if(now>n)
{
now=1;
}
while(b[now]==0)
{
if(now>n)
{
now=0;
}
now++;
}
for(int j=1;j<=2;j++)
{
getCard(now);
}
a[now].k=1;
while(a[now].card[a[now].l]=='0')
{
a[now].l++;
}
for(int i=a[now].l;i<=a[now].r;i++)
{
if(a[now].card[i]=='K')
{
int j=now+1;
while(b[j]==0)
{
if(j>n)
{
j=0;
}
j++;
}
if(a[now].k==0||a[j].jump==0&&!(a[now].character==1&&a[j].fakeJump==1)||a[j].jump==1&&((a[now].character==1&&a[j].character==2)||(a[now].character==2&&a[j].character==1)||a[now].character==a[j].character))
{
continue;
}
a[now].card[i]='0';
a[now].jump=1;
if(!a[now].z)
{
a[now].k=0;
}
if(a[j].d.empty())
{
a[j].health--;
}
else
{
a[j].card[a[j].d.front()]='0';
a[j].d.pop();
}
if(a[j].health<=0)
{
dead(now,j);
}
}
if(a[now].card[i]=='F')
{
int j;
if(a[now].character==3)
{
j=1;
}
else
{
j=now+1;
while(b[j]==0||a[j].jump==0&&!(a[now].character==1&&a[j].fakeJump==1)||a[j].jump==1&&((a[now].character==1&&a[j].character==2)||(a[now].character==2&&a[j].character==1)||a[now].character==a[j].character))
{
if(j>n)
{
j=0;
}
j++;
if(j==now)
{
break;
}
}
}
if(j==now)
{
continue;
}
a[now].card[i]='0';
a[now].jump=1;
if(a[j].jump==1)
{
if(nothingToBreak(now,j,1))
{
continue;
}
}
int u=1,v=1;
if(a[now].character==1&&a[j].character==2)
{
a[j].health--;
}
else
{
while(1)
{
while(u<=a[j].r)
{
if(a[j].card[u]=='K')
{
a[j].card[u]='0';
break;
}
u++;
}
if(u>a[j].r)
{
a[j].health--;
break;
}
while(v<=a[now].r)
{
if(a[now].card[v]=='K')
{
a[now].card[v]='0';
break;
}
v++;
}
if(v>a[now].r)
{
a[now].health--;
break;
}
}
}
if(a[now].health<=0)
{
dead(j,now);
}
if(a[j].health<=0)
{
dead(now,j);
}
}
if(a[now].card[i]=='N')
{
a[now].card[i]='0';
for(int j=now+1;j!=now;j++)
{
if(j>n)
{
j=1;
}
if(j==now)
{
break;
}
if(b[j]==0)
{
continue;
}
if(a[j].jump==1)
{
if(nothingToBreak(now,j,1))
{
continue;
}
}
for(int k=1;k<=a[j].r;k++)
{
if(a[j].card[k]=='K')
{
a[j].card[k]='0';
break;
}
if(k==a[j].r)
{
a[j].health--;
if(a[j].character==1)
{
a[now].fakeJump=1;
}
}
}
if(a[j].health<=0)
{
dead(now,j);
if(b[1]==0||f==0)
{
youxijieshu=1;
break;
}
}
}
}
if(a[now].card[i]=='W')
{
a[now].card[i]='0';
for(int j=now+1;j!=now;j++)
{
if(j>n)
{
j=1;
}
if(j==now)
{
break;
}
if(b[j]==0)
{
continue;
}
if(a[j].jump==1)
{
if(nothingToBreak(now,j,1))
{
continue;
}
}
if(a[j].d.empty())
{
a[j].health--;
if(a[j].character==1)
{
a[now].fakeJump=1;
}
}
else
{
a[j].card[a[j].d.front()]='0';
a[j].d.pop();
}
if(a[j].health<=0)
{
dead(now,j);
if(b[1]==0||f==0)
{
youxijieshu=1;
break;
}
}
}
}
if(a[now].card[i]=='Z')
{
a[now].card[i]='0';
if(a[now].z==0)
{
i=a[now].l;
}
a[now].z=1;
}
if(a[now].card[i]=='P'&&a[now].health<4)
{
a[now].card[i]='0';
a[now].health++;
}
if(b[1]==0||f==0)
{
youxijieshu=1;
break;
}
if(b[now]==0)
{
break;
}
}
}
if(b[1]==0)
{
cout<<"FP"<<endl;
}
else
{
cout<<"MP"<<endl;
}
for(int i=1;i<=n;i++)
{
if(b[i]==0)
{
cout<<"DEAD"<<endl;
continue;
}
while(a[i].l<=a[i].r&&a[i].card[a[i].l]<'A'||a[i].card[a[i].l]>'Z')
{
a[i].l++;
}
if(a[i].l>a[i].r)
{
cout<<endl;
continue;
}
int j=a[i].l;
cout<<a[i].card[j];
while(j<=a[i].r)
{
j++;
if(a[i].card[j]<'A'||a[i].card[j]>'Z')
{
continue;
}
cout<<" "<<a[i].card[j];
}
cout<<endl;
}
return 0;
}
回复
共 8 条回复,欢迎继续交流。
正在加载回复...