本文主要是介绍[SDOI2010]猪国杀 解题报告,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这道题作为一道省选题,质量真是差到了极点!!强烈建议千万不要去做!
首先,这题意与数据不合,而样例怎么看都是错的,反猪明明有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获得了牌paipl[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(
这篇关于[SDOI2010]猪国杀 解题报告的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!