摘要:
算好题目,反正我没想到可以用图论做(虽然现在做的是图论专题= =)首先是要把求每个位置上的值转化为求 “前缀和之差”,这是一个很有用的技巧其次,由输入的(n+(n-1)+...+2+1)个符号,可以确定出 n个前缀和的大小关系,并从大到小做有向边建图之后,用拓扑排序依次从大到小找到前缀和,与此同时对num[]做处理,实际上是离散出这n个值。这n值符合之前的大小关系,所以他们两两相减,就得到了题目要求的值 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 7 const int MAXN=15; 8 9 .. 阅读全文
摘要:
明显的欧拉回路,把颜色作为点,建图后,做一遍欧拉回路。不过我是现学的,打印路径上纠结了一下,发现随着FindEuler()的递归调用的结束,不断把点压入栈中,从后向前打印,遇到"支路"会先处理好支路再继续的。这样就可以顺序打印路径了。如果是直接打印或放在队列里,会发现打印出来的项链的关系正好相反,即前一行的第一个与本行的第二个颜色相同。邻接表又开小了,MAXN 2 #include 3 #include 4 #include 5 using namespace std; 6 7 const int MAXN=55; 8 const int MAXM=1111; 9 10 i 阅读全文
摘要:
好复杂的样子。。其实就是纸老虎,多了方向、颜色两个状态罢了,依旧是bfs。更新的时候注意处理好就行了,vis[][][][]要勇敢地开。不过这个代码交了十几遍的submission error,手都软了代码应该是没有问题,也可以参考http://blog.csdn.net/wjjayo/article/details/5809911 1 #include 2 #include 3 #include 4 using namespace std; 5 6 const int MAXN=30; 7 8 struct P{ 9 int x,y,d,c;10 int bfn;11 ... 阅读全文
摘要:
开始刷题啦= = 痛并快乐着,学到新东西的感觉其实比看那些无脑的小说、电视剧有意思多了bfs裸体,关键是先把所有的着火点放入队列,分开一个一个做bfs会超时的发现vis[][]是多余的,完全可以用num[][]代替了,不过不提交了。。。uva的submission error跳得我蛋疼,可是介于管理员Carlos及时回复了,还是理解人家吧 1 #include 2 #include 3 4 const int MAXN=1111; 5 6 struct P{ 7 int x,y; 8 int c; 9 }; 10 11 P que[MAXN*MAXN];... 阅读全文