[SDOI2010]猪国杀 解题报告

这篇博客是对SDOI2010省选题‘猪国杀’的解题报告,作者指出题目存在质量问题,如题意与数据不符,样例错误等。博主在解答过程中遇到的问题包括但不限于诸葛连弩的处理、决斗的判断和距离计算的特殊性,以及在编写代码时的一些低级错误。文章提供了按照题面只能得到30分的解决方案,同时也提醒读者注意实际比赛中可能遇到的问题。
摘要由CSDN通过智能技术生成

这道题作为一道省选题,质量真是差到了极点!!强烈建议千万不要去做!


首先,这题意与数据不合,而样例怎么看都是错的,反猪明明有6张无懈!

题意与数据之龃龉:

①题目中n<=5,而实际上n<=10.

②题目中明确指出不会出现牌不够用的情况,而实际上你需要不断地抽最后一张牌。

也就是说,如果你按照题目要求写的话,你的最终得分将是:30分。。。(←_←这种题考场上能有人A才怪。)

而如果你RP爆发把数组开到10,那么你就能拿90分。。

我写的时候没有考虑到的地方:

①装诸葛连弩可能导致前面出杀。

②与他人决斗可能导致自己死亡,此时应及时中止出牌阶段!!←←←←此处最大坑点。

③反猪的决斗永远是献给主猪的(而不是什么逆时针第一个。。)。

④题目中的距离与平常意义上的距离不一样!是逆时针旋转的距离!


犯的一些SB错误:

①把>0写成>9.

②把pig[j].id<0写成j<0.

③企图用break退出switch的外层循环(实际上只能退switch,而如果是if的话这么做是可以退到循环的)。

代码(循题面拿30分):

#include<iostream>
using namespace std;
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<string>
#include<map>
struct LS{
	int data;
	LS * pred,* succ; 
}pl[5000];
int tot;

struct PS{
	int blood,id;//-3:跳了的反;-2:没跳的反;-1:就是反的类反;0:死猪;1:其实是忠的类反;2:没跳的忠;3:跳了的忠;4:主公 
	bool zhuge;//判断是否装备诸葛 
	LS begin[9],end[9];
}pig[5];
int pred[5],next[5];//猪们的链表 
int heap[2000],m,n;//保存牌堆什么的。 
int fsum;//保存反猪的数量 
map<int,char> revf;map<char,int> f;//映射们 
bool flag;//是否有人又跳了。 

inline char gt(){//读取字符 
	char c=getchar();
	while(c<'A'||c>'Z')c=getchar();
	return c;
}
inline void got(int i,int pai){//猪i获得了牌pai
	pl[tot]=(LS){pai,pig[i].end[0].pred,pig[i].end};
	pig[i].end[0].pred->succ=pl+tot,pig[i].end[0].pred=pl+tot++;
	
	pl[tot]=(LS){pai,pig[i].end[pai].pred,pig[i].end+pai};
	pig[i].end[pai].pred->succ=pl+tot,pig[i].end[pai].pred=pl+tot++;
}
inline void del(int i){//弃置牌i 
	pl[i].pred->succ=pl[i].succ;
	pl[i].succ->pred=pl[i].pred;
	
	pl[i^1].pred->succ=pl[i^1].succ;
	pl[i^1].succ->pred=pl[i^1].pred;
}
inline void out(){//输出
	for(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值