摘要: 枚举统计所有<=L/2的数,在找到是否存在一个>L/2的数使所有其它数加上它都不大于L即可。 注意枚举的时候把模运算进行转化。 1 #include <stdio.h> 2 #include <string.h> 3 #define INF 0x7fffffff 4 typedef __int64 LL; 5 int n, l, a, b, mod; 6 int main(){ 7 //freopen("test.in", "r", stdin); 8 while (scanf("%d%d%d%d%d&quo 阅读全文
posted @ 2012-10-15 22:50 Burn_E 阅读(188) 评论(0) 推荐(0)
摘要: 用1~N构造一个序列,使max(最长上升子序列,最长下降子序列)最小,并且字典序最小。 最近做的构造题好多,这种1~N的序列大多是sqrt(n)的构造。。 官方题解: 其实这是个挺有趣的题,你需要构造一个 1..N 的排列,使得其最长上升序列的长度和最长下降序列的长度的最大值最小。应该比较容易能够想到这个答案是 sqrt(N) 级别的,这个结论的证明可以参考吴文虎的那本组合数学 p21 。 当然这还没有结束,怎么找字典序最小的那个解呢?先看看完全平方数吧,对于 4 ,我们有 2 1 4 3 ,对于 9 ,我们有 3 2 1 6 5 4 9 8 7 。嗯,完全平方数的规... 阅读全文
posted @ 2012-10-15 22:43 Burn_E 阅读(334) 评论(0) 推荐(0)
摘要: 给出一个N*M的矩阵,其中有些格子不可走。一个机器人想要通过命令从起点走到终点,命令分为三种,左转右转和前进,先给出一个只包含左转和右转的指令序列,问是否能够通过增加有限个的前进指令,使该指令可以完成从起点到终点。 N和M的范围是1000,指令长度为1000000,必然有巧妙的方法。 首先,执行完每个命令的朝向肯定是固定的,所以如果能更早的到达某一个格子的某个方向,必然会选择最早的到达方法,问题转化为求最早到达d[x][y][d]这个状态所需要的指令数。这里可以看作最短路的问题,用一个优先队列来解决,但是每次选择是LogN的。 有更优的方法在O(1)的复杂度实现选择,处理出每个命令下... 阅读全文
posted @ 2012-10-15 22:35 Burn_E 阅读(286) 评论(0) 推荐(0)