这道题磕了1天,终于死磕出来个30分QWQ(而且我第六个数据点还没过,过的是前五个和后面的一个
求助大佬们这道题容易注意不到的点,在下面告诉我就行
以下是代码
#include <bits/stdc++.h>
using namespace std;
struct node{
string sf;
bool die,zgln;
char p[4000];
int pl,xue_liang,zui_jin_chao_feng;
bool lf[30];
bool tiaobutiao;
};
int n,m,mp,sff[30],shi_yong_zhe,zhu,zhong,zhong_past,fan,fan_past,other,chuandi=0;
short ans,fff=0,kkk520=0;
queue <int>nanzhu;
queue <char>pd1;
node pigs[30];
short ysys;
char xcv;
bool af;
void zx(string sj,int num,int player);
short xxx(int player,string sf);
bool pd(string sj,int player);
int ask(string x,int player);
void binsi(int player);
short cp(int player);
int ssl(int player);
void js();
void js(){
for(int i=0;i<n;i++){
if(pigs[i].die==1){
cout << "DEAD" << endl;
continue;
}else{
for(int j=0;j<pigs[i].pl;j++){
cout << pigs[i].p[j] << " ";
}
cout << endl;
}
}
}
short xxx(int player,string sf){
int mop=player+1;
for(mop=player+1;true;mop++){
if(mop>=n){
mop-=n;
}
if(pigs[mop].die==1){
continue;
}
break;
}
if((pigs[player].sf=="MP" && pigs[mop].sf=="FP" && pigs[mop].tiaobutiao==1) || (pigs[player].sf=="FP" && pigs[mop].sf=="MP") || (pigs[player].sf=="ZP" && pigs[mop].sf=="FP" && pigs[mop].tiaobutiao==1) || (pigs[player].sf=="FP" && pigs[mop].sf=="ZP" && pigs[mop].tiaobutiao==1) || (player==mp && pigs[mp].lf[mop]==1 && pigs[mop].tiaobutiao==0)){
return mop;
}
return -1;
}
short kkk(int player,string sf){
int mm;
if(pigs[player].sf=="FP"){
return mp;
}
for(int i=1;i<n;i++){
mm=player+i;
if(mm>=n){
mm-=n;
}
if(pigs[mm].die==1){
continue;
}
if((pigs[player].sf=="MP" && pigs[mm].sf=="FP" && pigs[mm].tiaobutiao==1) || (pigs[player].sf=="ZP" && pigs[mm].sf=="FP" && pigs[mm].tiaobutiao==1) || (pigs[player].sf=="FP" && pigs[mm].sf=="ZP" && pigs[mm].tiaobutiao==1) || (player==mp && pigs[mp].lf[mm]==1 && pigs[mm].tiaobutiao==0)){
return mm;
}
}
return -1;
}
int ssl(int player){
int count3=0;
for(int i=0;i<pigs[player].pl;i++){
if(pigs[player].p[i]=='K'){
count3++;
}
}
return count3;
}
int ask(string x,int player){
if(x=="taoshitadedijizhang_pai"){
for(int i=0;i<pigs[player].pl;i++){
if(pigs[player].p[i]=='P'){
return i;
}
}
}
if(x=="shashitadedijizhang_pai"){
for(int i=0;i<pigs[player].pl;i++){
if(pigs[player].p[i]=='K'){
return i;
}
}
}
if(x=="shanshitadedijizhang_pai"){
for(int i=0;i<pigs[player].pl;i++){
if(pigs[player].p[i]=='D'){
return i;
}
}
}
if(x=="wuxiekejishitadedijizhang_pai"){
for(int i=0;i<pigs[player].pl;i++){
if(pigs[player].p[i]=='J'){
return i;
}
}
}
}
bool pd(string sj,int player){
if(sj=="zhugong_die"){
if(pigs[mp].die==1){
return 1;
}
}
if(sj=="zhongchen_die"){
if(zhong_past>zhong){
return 1;
}
}
if(sj=="fanzei_die_all"){
if(!fan){
return 1;
}
}
if(sj=="shifouyoukexiangying_pai:sha"){
for(int i=0;i<pigs[player].pl;i++){
if(pigs[player].p[i]=='K'){
return 1;
}
}
}
if(sj=="shifouyoukexiangying_pai:shan"){
for(int i=0;i<pigs[player].pl;i++){
if(pigs[player].p[i]=='D'){
return 1;
}
}
}
if(sj=="shifouyoukexiangying_pai:tao"){
for(int i=0;i<pigs[player].pl;i++){
if(pigs[player].p[i]=='P'){
return 1;
}
}
}
if(sj=="shifouyoukexiangying_pai:wu_xie_ke_ji"){
for(int i=0;i<pigs[player].pl;i++){
if(pigs[player].p[i]=='J'){
return 1;
}
}
}
if(sj=="others_wuxiekeji_xiangying_yes_or_no?" && (pigs[player].tiaobutiao==1 || player==mp)){ //mm--对player使用-->无懈可击
for(int i=0;i<n;i++){
int mm=i+player;
if(mm>=n){
mm-=n;
}
if(mm=other){
continue;
}
if(pd("shifouyoukexiangying_pai:wu_xie_ke_ji",mm) && ((pigs[mm].sf==pigs[player].sf && pigs[player].tiaobutiao) || (pigs[mm].sf=="MP" && pigs[player].sf=="ZP" && pigs[player].tiaobutiao) || (pigs[mm].sf=="ZP" && pigs[player].sf=="MP"))){
other=mm;
return 1;
}
}
}
if(sj=="shifouyitiao_enemy?"){
for(int i=1;i<n;i++){
int mm=i+player;
if(mm>=n){
mm-=n;
}
if((pigs[mm].tiaobutiao && pigs[mm].sf=="FP" && pigs[player].sf=="ZP" )||( pigs[mm].tiaobutiao && pigs[mm].sf=="ZP" && pigs[player].sf=="FP" )||( pigs[mm].sf=="MP" && pigs[player].sf=="FP" )||( pigs[mm].tiaobutiao && pigs[mm].sf=="FP" && pigs[player].sf=="MP" )||( pigs[mp].lf[mm] && pigs[player].sf=="MP")){
return 1;
}
}
}
return 0;
}
void zx(string sj,int num,int player){
if(sj=="use"){ //num=第几张牌 player=谁在使用
if(pigs[player].p[num]=='P'){
if(pigs[player].xue_liang<4){
zx("syp",num,player);
zx("jie_suan",1,player);
}else{
chuandi=1;
}
}else if(pigs[player].p[num]=='K'){
if(ysys==0 || pigs[player].zgln){
if(pd("shifouyitiao_enemy?",player)){
ysys=1;
pigs[player].zui_jin_chao_feng=xxx(player,pigs[player].sf);
if(pigs[player].zui_jin_chao_feng==-1){
chuandi=1;
return;
}
if(pigs[player].zui_jin_chao_feng!=-1){
zx("syp",num,player);
zx("jie_suan",2,player);
}
}else{
chuandi=1;
}
}else{
chuandi=1;
}
}else if(pigs[player].p[num]=='F'){
if(pd("shifouyitiao_enemy?",player)){
pigs[player].zui_jin_chao_feng=kkk(player,pigs[player].sf);
if(pigs[player].zui_jin_chao_feng==-1){
chuandi=1;
return;
}
if(pigs[player].zui_jin_chao_feng!=-1){
zx("syp",num,player);
zx("jie_suan",3,player);
}
}else{
chuandi=1;
}
}else if(pigs[player].p[num]=='N'){
zx("syp",num,player);
zx("jie_suan",4,player);
}else if(pigs[player].p[num]=='W'){
zx("syp",num,player);
zx("jie_suan",5,player);
}else if(pigs[player].p[num]=='Z'){
zx("syp",num,player);
zx("jie_suan",6,player);
}else{
chuandi=1;
}
}
if(sj=="jie_suan"){ //num=什么牌 player=谁在使用
if(num==1){
pigs[player].xue_liang++;
shi_yong_zhe=player;
}
if(num==2){
pigs[player].tiaobutiao=1;
shi_yong_zhe=player;
if(pd("shifouyoukexiangying_pai:shan",pigs[player].zui_jin_chao_feng)){
zx("qizhi_wuxiekeji_shan_sha_tao",ask("shanshitadedijizhang_pai",pigs[player].zui_jin_chao_feng),pigs[player].zui_jin_chao_feng);
}else{
pigs[pigs[player].zui_jin_chao_feng].xue_liang--;
binsi(pigs[player].zui_jin_chao_feng);
}
}
if(num==3){
pigs[player].tiaobutiao=1;
shi_yong_zhe=player;
other=pigs[player].zui_jin_chao_feng;
if(pd("others_wuxiekeji_xiangying_yes_or_no?",other)){
int ijn=1;
pigs[other].tiaobutiao=1;
zx("qizhi_wuxiekeji_shan_sha_tao",ask("wuxiekejishitadedijizhang_pai",other),other);
int player2=other;
while(pd("others_wuxiekeji_xiangying_yes_or_no?",player2)){
ijn++;
pigs[other].tiaobutiao=1;
zx("qizhi_wuxiekeji_shan_sha_tao",ask("wuxiekejishitadedijizhang_pai",other),other);
player2=other;
}
if(ijn%2==0){
if(pd("shifouyoukexiangying_pai:sha",pigs[player].zui_jin_chao_feng)){
zx("juedou_sha",player,pigs[player].zui_jin_chao_feng);
}else{
pigs[pigs[player].zui_jin_chao_feng].xue_liang--;
binsi(pigs[player].zui_jin_chao_feng);
}
}
}else if(pd("shifouyoukexiangying_pai:sha",pigs[player].zui_jin_chao_feng)){
zx("juedou_sha",player,pigs[player].zui_jin_chao_feng);
}else{
pigs[pigs[player].zui_jin_chao_feng].xue_liang--;
binsi(pigs[player].zui_jin_chao_feng);
}
}
if(num==4){
shi_yong_zhe=player;
for(int i=1;i<n;i++){
int asdf=i+player;
if(asdf>=n){
asdf-=n;
}
if(pigs[asdf].die){
continue;
}
other=asdf;
if(pd("others_wuxiekeji_xiangying_yes_or_no?",other)){
int ijn=1;
pigs[other].tiaobutiao=1;
zx("qizhi_wuxiekeji_shan_sha_tao",ask("wuxiekejishitadedijizhang_pai",other),other);
int player2=player;
player=other;
while(pd("others_wuxiekeji_xiangying_yes_or_no?",player)){
ijn++;
pigs[other].tiaobutiao=1;
zx("qizhi_wuxiekeji_shan_sha_tao",ask("wuxiekejishitadedijizhang_pai",other),other);
player=other;
}
if(ijn%2==0){
if(pd("shifouyoukexiangying_pai:sha",asdf)){
zx("qizhi_wuxiekeji_shan_sha_tao",ask("shashitadedijizhang_pai",asdf),asdf);
}else{
af=0;
pigs[asdf].xue_liang--;
binsi(asdf);
if(af==1){
nanzhu.push(asdf);
}
}
}
}else if(pd("shifouyoukexiangying_pai:sha",asdf)){
zx("qizhi_wuxiekeji_shan_sha_tao",ask("shashitadedijizhang_pai",asdf),asdf);
}else{
af=0;
pigs[asdf].xue_liang--;
binsi(asdf);
if(af==1){
nanzhu.push(asdf);
}
}
if(pd("zhugong_die",-1)){
break;
}
if(pd("fanzei_die_all",-1)){
break;
}
}
}
if(num==5){
shi_yong_zhe=player;
for(int i=1;i<n;i++){
int asdf=i+player;
if(asdf>=n){
asdf-=n;
}
if(pigs[asdf].die){
continue;
}
other=asdf;
if(pd("others_wuxiekeji_xiangying_yes_or_no?",other)){
int ijn=1;
pigs[other].tiaobutiao=1;
zx("qizhi_wuxiekeji_shan_sha_tao",ask("wuxiekejishitadedijizhang_pai",other),other);
int player2=player;
player=other;
while(pd("others_wuxiekeji_xiangying_yes_or_no?",player)){
ijn++;
pigs[other].tiaobutiao=1;
zx("qizhi_wuxiekeji_shan_sha_tao",ask("wuxiekejishitadedijizhang_pai",other),other);
player=other;
}
if(ijn%2==0){
if(pd("shifouyoukexiangying_pai:shan",asdf)){
zx("qizhi_wuxiekeji_shan_sha_tao",ask("shanshitadedijizhang_pai",asdf),asdf);
}else{
af=0;
pigs[asdf].xue_liang--;
binsi(asdf);
if(af==1){
nanzhu.push(asdf);
}
}
}
}else if(pd("shifouyoukexiangying_pai:shan",asdf)){
zx("qizhi_wuxiekeji_shan_sha_tao",ask("shanshitadedijizhang_pai",asdf),asdf);
}else{
af=0;
pigs[asdf].xue_liang--;
binsi(asdf);
if(af==1){
nanzhu.push(asdf);
}
}
if(pd("zhugong_die",-1)){
break;
}
if(pd("fanzei_die_all",-1)){
break;
}
}
}
if(num==6){
shi_yong_zhe=player;
pigs[player].zgln=1;
}
}
if(sj=="zhugong_qi_pai"){
for(int i=0;i<pigs[mp].pl;i++){
pigs[mp].p[i]==0;
}
pigs[mp].pl=0;
pigs[mp].zgln=0;
}
if(sj=="mo_pai"){ //num=几张牌 player=谁摸牌
for(int i=1;i<=num;i++){
xcv=pd1.front();
pd1.pop();
pigs[player].p[pigs[player].pl]=xcv;
pigs[player].pl++;
}
}
if(sj=="syp"){ //num=使用了第几张牌 player=使用的是谁的牌
for(int i=num;i<pigs[player].pl;i++){
pigs[player].p[i]=pigs[player].p[i+1];
}
pigs[player].pl--;
}
if(sj=="qizhi_wuxiekeji_shan_sha_tao"){ //player=谁在响应
zx("syp",num,player);
}
if(sj=="juedou_sha"){ //player=谁先响应 num=谁后响应 num->player决斗
shi_yong_zhe=num;
if(ssl(num)>=ssl(player)){
int sdfg=ssl(player);
zx("qizhisha",sdfg,player);
zx("qizhisha",sdfg,num);
pigs[player].xue_liang--;
binsi(player);
}
if(ssl(num)<ssl(player)){
int sdfg=ssl(num);
zx("qizhisha",sdfg,num);
zx("qizhisha",sdfg+1,player);
pigs[num].xue_liang--;
binsi(num);
}
}
if(sj=="qizhisha"){ //player=谁在弃杀 num=弃置多少张杀
int iii=0;
for(int i=0;i<pigs[player].pl;i=i){
if(pigs[player].p[i]=='K'){
zx("syp",i,player);
iii++;
}else{
i++;
}
if(iii==num){
break;
}
}
}
}
short cp(int player){
zx("mo_pai",2,player);
for(int i=0;i<pigs[player].pl;i=i){
af=-1;
fan_past=fan;
zhong_past=zhong;
chuandi=0;
zx("use",i,player);
if(chuandi==1){
i++;
}else if(i>0){
i=0;
}
if(pigs[player].die){
break;
}
if(pd("zhugong_die",-1) && pd("fanzei_die_all",-1)){
if(kkk520==1){
return 1;
}else{
return 0;
}
}
if(!nanzhu.empty()){
if(player==mp){
while(!nanzhu.empty()){
int chen_zhe=nanzhu.front();
nanzhu.pop();
if(pigs[chen_zhe].sf=="ZP"){
zx("zhugong_qi_pai",-1,-1);
}else{
zx("mo_pai",3,pigs[player].zui_jin_chao_feng);
}
}
}else{
while(!nanzhu.empty()){
int chen_zhe=nanzhu.front();
nanzhu.pop();
if(pigs[chen_zhe].sf=="FP"){
zx("mo_pai",3,pigs[player].zui_jin_chao_feng);
}
}
}
}
if(pigs[player].sf=="FP" && pigs[player].die){
zx("mo_pai",3,pigs[player].zui_jin_chao_feng);
break;
}
if(pd("zhongchen_die",-1) && pd("fanzei_die_all",-1)){
for(int i=player;i<n+player;i++){
int poooo=i;
if(poooo>=n){
poooo-=n;
}
}
}
if(pd("zhugong_die",-1)){
return 1;
}
if(pd("zhongchen_die",-1) && player==mp){
zx("zhugong_qi_pai",-1,-1);
}
if(pd("fanzei_die_all",-1)){
return 0;
}
if(pigs[player].p[i]!='N' && pigs[player].p[i]!='W'){
zx("mo_pai",(fan_past-fan)*3,player);
}
}
return -1;
}
void binsi(int player){
if(pigs[player].xue_liang==0 && pd("shifouyoukexiangying_pai:tao",player)){
zx("syp",ask("taoshitadedijizhang_pai",player),player);
pigs[player].xue_liang++;
if(pigs[player].sf=="MP"){
pigs[mp].lf[shi_yong_zhe]=1;
}
return;
}
if(pigs[player].xue_liang>0){
if(pigs[player].sf=="MP"){
pigs[mp].lf[shi_yong_zhe]=1;
}
return;
}
pigs[player].die=1;
if(pigs[player].sf=="MP"){
zhu--;
if(zhu==0){
kkk520=1;
}
}else if(pigs[player].sf=="ZP"){
zhong--;
if(af==0){
af=1;
}
}else{
fan--;
if(fan==0){
kkk520=2;
}
if(af==0){
af==1;
}
}
}
int main(){
cin >> n >> m;
for(int i=0;i<n;i++){
cin >> pigs[i].sf;
memset(pigs[i].p,0,sizeof(pigs[i].p));
for(int j=0;j<4;j++){
cin >> pigs[i].p[j];
pigs[i].pl=4;
pigs[i].xue_liang=4;
pigs[i].tiaobutiao=0;
pigs[i].die=0;
pigs[i].zgln=0;
}
if(pigs[i].sf=="MP"){
memset(pigs[i].lf,0,sizeof(pigs[i].lf));
mp=i;
pigs[mp].tiaobutiao=1;
zhu++;
}else if(pigs[i].sf=="FP"){
fan++;
}else{
zhong++;
}
}
for(int i=0;i<m;i++){
char nm;
cin >> nm;
pd1.push(nm);
if(i==m-1){
for(int i=0;i<10000;i++){
pd1.push(nm);
}
}
}
while(true){
for(int i=mp;i<n+mp;i++){
int lplp=i;
if(lplp>=n){
lplp-=n;
}
if(pigs[lplp].die==1){
continue;
}
ysys=0;
ans=cp(lplp);
if(ans==0 || ans==1){
fff=1;
break;
}
}
if(fff){
break;
}
}
ans ? cout << "FP" : cout << "MP";
cout << endl;
js();
return 0;
}