摘要:
UVA_696 一开始没什么思路,看了别人的解题报告之后发现可以总结出规律的。 为了讨论方便,不妨设边长小的为M,大的为N。 对于马来讲,它不会攻击与它同行、同列及同斜线的马,这样其实我们也可以YY一下的,分别放一行、一列、一斜列,最后发现对于一些M、N稍大的情况,最优解就是交错一斜列、一斜列地放出来,这样的解比较容易总结出是(M*N + 1)/2。 但也有特殊情况,比如M=1时,这样可以放满这一行,结果就是N。 比较难想到的应该就M=2的这种特殊情况了,最优解需要从左向右,间隔在田字格内放4个马。 具体直观的图可以看一下Knowledgetime的百度空间。 http://kong... 阅读全文
posted @ 2011-12-20 20:50
Staginner
阅读(409)
评论(0)
推荐(0)
摘要:
UVA_10570 一开始没有理解题目中所说的exchange positions,还以为只有相邻的才能换,后来发现不相邻的也可以换。 第一次AC的时候有点YY的味道,但后来想了一下,确实这么做是可以的。 首先破环为链,那么最后的序列不论是正着还是反着,都会以其中某一个点为起点,于是我们枚举起点和序列的正反,求出最小的exchange即可。在求的时候用贪心的思想,首先把1换到位置1,再把2换到位置2,如此反复下去。 对于贪心思想的证明,后来想了一个粗糙的证明,不知道这么证是否有说服力。 比如我们在安排1的时候,如果不直接把1换到位置1,那么必然应该是先让1和x换一下(或者中间换很多次... 阅读全文
posted @ 2011-12-20 19:22
Staginner
阅读(771)
评论(1)
推荐(1)
摘要:
UVA_306 一开始倒是想到了这种移位加密是有周期的,但最后却是用的它们的最小公周期去算的。 后来发现比别人的程序要慢很多,仔细看后才发现实际可以对每个字符的位置都用它自己的周期算一下,得到的位置也就是该字符最终的位置,这样相比用最小公周期去算要节省很多时间。#include<stdio.h>#include<string.h>#define MAXD 210char b[310], txt[MAXD], code[MAXD];int g[MAXD], N, p[MAXD], t[MAXD], K;void init(){ int i, j, k, n; for(i 阅读全文
posted @ 2011-12-20 17:14
Staginner
阅读(414)
评论(0)
推荐(0)
浙公网安备 33010602011771号