首页 > 其他分享 >挑战猪国杀

挑战猪国杀

时间:2022-10-09 20:59:04浏览次数:50  
标签:猪国 ch rll 挑战 ll char maxn define

码了一个上午,代码存到hz服务器上面了,结果因为服务器里有人删了我东西,导致我码没了,一个上午白干了......

然后下午从头开始.

码了一整个下午,终于把主体结构干完了. 一共276行.

然后,就是这个RE风波. 发现这个主猪(其实每个猪都是)一直剩着1血,苟延残喘,不停摸牌. 找了半天,居然是这里错了......

我开始设的布尔,结果就把它当char类型用了...

这个搞了我一个多小时.

然后WA90.

继续调,拿数据拍发现有一处牌没有访问到导致后面一错一串.

std:

wrong:

然后中间调的时候也发现几处小错误,但是对答案没有影响,应该是没有设这样的数据.

然后,就是:

我一天时间没了!

但是确实锻炼出了些码力.

扔一个码
#include<bits/stdc++.h>
#define ll int
#define rg register
#define rll rg ll
#define maxn 21
#define put_ putchar(' ')
#define putn putchar('\n')
using namespace std;
inline ll read()
{
	rll f=0,x=0;rg char ch=getchar();while(ch<'0'||ch>'9') f|=ch=='-',ch=getchar();
	while(ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+(ch^'0'),ch=getchar();return f?-x:x;
}
inline void write(rll x) { if(x<0) putchar('-'),x=-x;if(x>9) write(x/10);putchar(x%10|'0'); }
struct node
{
	ll type,hp;// type:M.主猪 Z.忠猪 F.反猪
	ll nx,ls;// 下一个位置和上一个位置
	bool zb;// 装备
	vector<char> g;// 手牌,没有设成0
	// 桃/P  殺/K  闪/D
	// 决斗/F  南猪入侵/N
	// 万箭齐发/W  无懈可击/J
	// 猪哥连弩/Z
}pig[maxn];

char know[maxn];// 主猪知道的**类**反猪

ll n,m;

bool ed;// 结束标记
ll fz;// 反猪

char s[maxn];

queue<char> card;

inline void new_card(rll now)// 发牌
{
	// cout<<card.size()<<endl;
	pig[now].g.push_back(card.front());
	if(card.size()>1) card.pop();
}

inline void peach_dead(rll now1,rll now2)// 濒死吃桃
{
	// cout<<now1<<' '<<now2<<endl;
	for(rll i=0;i<pig[now2].g.size();i++)
		if(pig[now2].g[i]=='P')
		{
			pig[now2].g[i]=0;
			pig[now2].hp++;
			return;
		}
	pig[pig[now2].nx].ls=pig[now2].ls;
	pig[pig[now2].ls].nx=pig[now2].nx;
	// cout<<fz<<endl;
	if(now2==1) { ed=1;return; }
	if(pig[now2].type=='F') fz--;
	if(!fz) { ed=1;return; }
	if(pig[now2].type=='F') new_card(now1),new_card(now1),new_card(now1);
	if(pig[now2].type=='Z'&&pig[now1].type=='M') pig[now1].g.clear(),pig[now1].zb=0;
}

inline bool wxkj(rll now1,rll now2,rg bool op)// 无懈可击
{
	rll t=now1;
	do
	{
		if(op)
		{
			if(know[now2]==pig[t].type||(know[now2]=='M'&&pig[t].type=='Z')||(know[now2]=='Z'&&pig[t].type=='M'))
				for(rll i=0;i<pig[t].g.size();i++)
				{
					if(pig[t].g[i]=='J')
					{
						pig[t].g[i]=0; know[t]=pig[t].type;
						return (!wxkj(t,now1,0));
					}
				}
		}
		else
		{
			if(((pig[t].type=='M'||pig[t].type=='Z')&&know[now1]=='F')||((know[now1]=='M'||know[now1]=='Z')&&pig[t].type=='F'))
				for(rll i=0;i<pig[t].g.size();i++)
				{
					if(pig[t].g[i]=='J')
					{
						pig[t].g[i]=0; know[t]=pig[t].type;
						return (!wxkj(t,now1,0));
					}
				}
		}
		t=pig[t].nx;
	} while(t^now1);
	return 0;
}

inline void kill1(rll now1,rll now2)// 殺(还不允许用kill了?)
{
	rg bool fl=0;
	for(rll i=0;i<pig[now2].g.size();i++)
	{
		if(pig[now2].g[i]=='D')// 用“閃”
		{
			pig[now2].g[i]=0;
			fl=1;break;
		}
	}
	if(!fl) { pig[now2].hp--; if(pig[now2].hp<=0) peach_dead(now1,now2); }
}

inline void juedou(rll now1,rll now2)// 决斗
{
	// cout<<0;
	if(wxkj(now1,now2,1)) return;
	// cout<<1;
	if(now1==1&&pig[now2].type=='Z')
	{
		pig[now2].hp--; if(pig[now2].hp<=0) peach_dead(now1,now2);
		return;
	}

	rll cnt1=0,cnt2=0;
	while(1)
	{
		while((pig[now2].g[cnt2]^'K')&&cnt2<pig[now2].g.size()) cnt2++;
		if(cnt2==pig[now2].g.size())
		{
			pig[now2].hp--; if(pig[now2].hp<=0) peach_dead(now1,now2);
			return;
		}
		else pig[now2].g[cnt2]=0;
		while((pig[now1].g[cnt1]^'K')&&cnt1<pig[now1].g.size()) cnt1++;
		if(cnt1==pig[now1].g.size())
		{
			pig[now1].hp--; if(pig[now1].hp<=0) peach_dead(now2,now1);
			return;
		}
		else pig[now1].g[cnt1]=0;
	}
}

inline void nzrq(rll now1)// 南蛮入侵
{
	for(rll now2=pig[now1].nx;now2^now1;now2=pig[now2].nx)
		if(!wxkj(now1,now2,1))
		{
			rg bool fl=0;
			for(rll i=0;i<pig[now2].g.size();i++)
				if(pig[now2].g[i]=='K')
				{
					pig[now2].g[i]=0;fl=1;
					break;
				}
			if(!fl)
			{
				pig[now2].hp--;
				if(now2==1&&(!know[now1])) know[now1]=1;
				if(pig[now2].hp<=0) peach_dead(now1,now2);
				if(ed) return;
			}
		}
}

inline void wjqf(rll now1)// 万箭齐发
{
	for(rll now2=pig[now1].nx;now2^now1;now2=pig[now2].nx)
		if(!wxkj(now1,now2,1))
		{
			rg bool fl=0;
			for(rll i=0;i<pig[now2].g.size();i++)
				if(pig[now2].g[i]=='D')
				{
					pig[now2].g[i]=0;fl=1;
					break;
				}
			if(!fl)
			{
				pig[now2].hp--;
				if(now2==1&&(!know[now1])) know[now1]=1;
				if(pig[now2].hp<=0) peach_dead(now1,now2);
				if(ed) return;
			}
		}
}

inline void start()
{
	if(!fz) return;
	for(rll i=1;i;i=pig[i].nx)
	{
		// cout<<i<<endl;
		rg bool fl=0;// 是否已使用一张“殺”
		new_card(i);new_card(i);
		for(rll j=0;j<pig[i].g.size();j++)
		{
			if(pig[i].hp<=0) break;
			if(!pig[i].g[j]) continue;
			// cout<<i<<' '<<j<<' '<<pig[i].g[j]<<' '<<pig[i].hp<<endl;
			switch(pig[i].g[j])
			{
			case 'P':
				if(pig[i].hp^4)
					pig[i].g[j]=0,pig[i].hp++;
				break;
			case 'K':
				if(fl&&(!pig[i].zb)) break;
				if(pig[i].type=='M'&&(know[pig[i].nx]^1)&&(know[pig[i].nx]^'F')) break;
				if(pig[i].type=='F'&&(know[pig[i].nx]^'Z')&&(know[pig[i].nx]^'M')) break;
				if(pig[i].type=='Z'&&(know[pig[i].nx]^'F')) break;
				pig[i].g[j]=0; kill1(i,pig[i].nx);
				know[i]=pig[i].type;
				fl=1; if(ed) return;
				break;
			case 'F':
				if(pig[i].type=='F')
				{
					pig[i].g[j]=0;
					juedou(i,1); know[i]=pig[i].type;
					if(ed) return; j=-1; break;
				}
				for(rll k=pig[i].nx;k^i;k=pig[k].nx)
				{
					// write(k);put_;
					if((pig[i].type=='M'&&(know[k]==1||know[k]=='F'))||(pig[i].type=='Z'&&know[k]=='F'))
					{
						// putchar('*');
						pig[i].g[j]=0;
						juedou(i,k); know[i]=pig[i].type;
						if(ed) return; j=-1; break;
					}
				}
				// putn;
				break;
			case 'N':
				pig[i].g[j]=0; nzrq(i);
				if(ed) return; j=-1;
				break;
			case 'W':
				pig[i].g[j]=0; wjqf(i);
				if(ed) return; j=-1;
				break;
			case 'Z':
				pig[i].g[j]=0; pig[i].zb=1; j=-1;
				break;
			}
		}
	}
}

int main()
{
	// 读入部分
	n=read();m=read();
	for(rll i=1;i<=n;i++)
	{
		scanf("%s",s+1);
		pig[i].type=s[1]; if(s[1]=='F') fz++;
		for(rll j=1;j<=4;j++) scanf("%s",s+1),pig[i].g.push_back(s[1]);
		pig[i].hp=4; pig[i].ls=(i-2+n)%n+1; pig[i].nx=i%n+1;
	}
	know[1]='M';
	for(rll i=1;i<=m;i++) scanf("%s",s+1),card.push(s[1]);
	// 回合部分
	start();
	// 结束部分
	puts(pig[1].hp>0?"MP":"FP");
	for(rll i=1;i<=n;i++)
	{
		if(pig[i].hp<=0) { puts("DEAD"); continue; }
		for(rll j=0;j<pig[i].g.size();j++) if(pig[i].g[j]) putchar(pig[i].g[j]),put_;
		putn;
	}
	return 0;
}

标签:猪国,ch,rll,挑战,ll,char,maxn,define
From: https://www.cnblogs.com/1Liu/p/16773621.html

相关文章

  • 挑战Python的语法练习
    前面的文章中我们已经学习了Python的许多知识点,了解了Python的基本概念和一些语法知识,算是对Python有了一个很好的了解。在接下来的最后一关,我们来一场华丽的华山论剑,我们......
  • 降额的秘密——不要挑战datasheet!
    ​ 大家好,我是工程师看海。什么是降额设计?我们为什么要降额?额指的是额定工作状态,降额就是保障我们电子电路的器件工作条件在额定范围之内,专业点讲就是元器件的使用应力低......
  • 2022/10/7 T3 boss挑战
    题目地址题目大意:给你敌人的生命值,你的生命值、愤怒值、蓝值,愤怒值可以在普攻造成伤害的同时回复,生命和蓝值可以喝药回,愤怒值和蓝值可以放大招造成伤害,每回合你先选一种行......
  • [挑战记录][POJ3760]魔兽世界(修改版)
    2022100516:30开始答题16:50写了个初始化17:31假了,重构17:53基本重构完了(虽然一共也没写多少)开始施工角色能力17:59\(100\)行达成然而又假了,重写20:44基本......
  • 每天一张图挑战!
    10/6迷迭香没有皮肤,玩不起......
  • 猪国杀
    先放码#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<set>#defineSakuraint#defineReregisterint#define_putchar......
  • 一天过去了, 猪国杀结束了
    %%%%%%%%%%%%%%%%%%chen_jr四个小时就切了猪国杀%%%%%%%%%%%%%而我是什么fengwufeiwu然后就是与世俗同流合污的部分......
  • [挑战记录]模拟/搜索题单
    2022100320:18[省选联考2022]预处理器\(\operatorname{string}\)科技题#include<cstdio>#include<cstring>#include<string>#include<iostream>#include<map>#de......
  • 关于猪国杀
    从今天下午开始看题于2022.10.419:26:23在\(loj\)\(ac\)没有大改,没有重构,框架一遍过下面是原版代码code#include<bits/stdc++.h>usingnamespacestd;#defineM......
  • [挑战记录][省选联考 2022] 预处理器
    2022100220:30开始答题20:35先水\(20\)分21:30假了,重构2022100306:34\(60\)分19:45继续重构,学习了一些\(\operatorname{string}\)的科技20:18过了#inclu......