摘要: 题目大意:对时钟的时间hh:mm:ss定义一个平面中的点, 它由时针, 分针, 秒针的质量, 长度, 位置决定, 三根指针分别有长度和质量, 质量均匀分布, 则该时钟的这个时间对应三根指针质心的重心. 给一个初始时间和结束时间, 计算这个点的路程.简要分析:模拟题, 每一秒算一下那个奇葩的点就行了啊. 时间复杂度O(T).代码实现:View Code 1 #include <cmath> 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 #include <alg 阅读全文
posted @ 2012-02-25 19:11 zcwwzdjn 阅读(245) 评论(0) 推荐(0) 编辑
摘要: 题目大意:定义f(x)表示, x最多为某个正整数的f(x)次幂.求[l, r]区间内所有数f(x)的和. r不超过2 * 10 ^ 18.简要分析:我做复杂了, 于是这个做法就是:注意到f(x)的值是小于64的, 我们就可以统计出[l, r]区间内的1次方数, 2次方数直至63次方数(并不是严格2次方, 可以包含4次方等). 令p[x]记录x次方数的个数, 现在我们考虑如何求恰为1次方数的数的个数. 很明显可以利用容斥原理, 答案就是p[1] - p[2] - p[3] - p[5] + p[6] - p[7] + p[10] - ..., 每一项的系数恰为该数的莫比乌斯函数(详见wiki). 阅读全文
posted @ 2012-02-25 01:34 zcwwzdjn 阅读(485) 评论(0) 推荐(0) 编辑
摘要: 题目大意:不超过10 ^ 5个数, 一开始设定为相同的正整数, 模拟3种操作:a) 询问一段区间是否连续, 是的话把这一段数减去某个数, 当某个数小于等于0时相当于断开.b) 把一段区间的数增加一个数, 断开的数不再增加.c) 把一段区间的数与某个数取max , 断开的数不参与此过程.简要分析:数据结构题, 分块要好写一些. 假定每个数减到小于0时修改为0. 每一块多维护4个值: 最小值minv, 变化量delta, c操作的标记addto, 还要记录一个offset, 它的含义是指某一块在其他标记存在的情况下, 不超过-offset的块中的数已经断开. 另外注意到b和c两种标记可以这样处理, 阅读全文
posted @ 2012-02-25 01:24 zcwwzdjn 阅读(302) 评论(0) 推荐(0) 编辑
摘要: 题目大意:在一个8 * 8的地图上, 有一些不同颜色的格子, 每次可以把两个格子交换, 可以交换空白格子, 此时在纵列或横排上有连续的超过2个相同颜色的格子, 它们会同时消去, 剩下的格子会下落至空白位置, 再进行消去过程. 问一次操作能否消去所有格子.简要分析:直接模拟, 和NOIP2011的mayan相似, 不过这题更简单. 枚举每个格子O(n ^ 2), 消去过程O(n ^ 2), 于是复杂度大约是O(n ^ 4).代码实现:View Code 阅读全文
posted @ 2012-02-25 01:06 zcwwzdjn 阅读(236) 评论(0) 推荐(0) 编辑
摘要: 题目大意:把x ^ n - 1分解因式, n不超过1001.简要分析:因式分解似乎是很难的问题, 不过这道题有特殊性. 首先每个式子的分解式中比含(x - 1), 剩下n项恰好是x的0至n - 1次幂, 这里能分组提公因式, 分的组数恰好是n的约数,这样就可以继续下去. 所以最后的答案中总能拼凑得到形如x ^ m - 1的因式, 其中m是n的约数, 那么哪个因式是x ^ n - 1所独有的呢? 我们令这个式子为P(n), 那么有P(1) = x - 1P(n) = (x ^ n - 1) / P(m1) / P(m2) / P(m3) / ... / P(mk), 其中m1, m2, m3, 阅读全文
posted @ 2012-02-25 00:59 zcwwzdjn 阅读(365) 评论(0) 推荐(0) 编辑
摘要: 题目大意:有一扇门, 一开始是好的, 一次来了n个人, 每个人有p的概率把门弄坏, 维修门的费用为a,被一个人发现门坏的罚款为b, 求期望最小花费.简要分析:期望DP. 一开始想顺推没想出来, 后来被同学提醒开始想反推, 果然很顺利!用f[i][0]表示第i个人来之前门坏, 到结束时的期望最小花费, f[i][1]则表示门好. 显然f[n][0] = min(a, b), f[n][1] = 0.0, 然后有f[i][0] = min(f[i + 1][0] + b, a + p * f[i + 1][0] + (1.0 - p) * f[i + 1][1])f[i][1] = min(f[i 阅读全文
posted @ 2012-02-25 00:41 zcwwzdjn 阅读(466) 评论(0) 推荐(0) 编辑
摘要: 题目大意:长度为L的不封闭的曲线, 开口用线段连接, 求其最大面积.简要分析:小学数学有这么个结论吧: 封闭曲线周长相等时, 圆的面积最大. 于是我们猜想, 不封闭的曲线, 最优是不是半圆, 然后样例似乎就是这样的. 这个算法的严谨证明还没想到.代码实现:View Code 1 #include <cmath> 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 #include <algorithm> 6 using namespace std; 7 8 c 阅读全文
posted @ 2012-02-25 00:30 zcwwzdjn 阅读(265) 评论(0) 推荐(0) 编辑
摘要: 题目大意:给一个点数不超过8的无权有向图, 求树形图的数目.简要分析:根据点数很少这个条件, 我们自然想到搜索或者状态压缩动态规划, 而这两种做法都是正确的, 在这里我重点介绍第二种算法.先枚举根, 再用f[mask1][mask2]表示mask1集合里的点已连通且mask2集合里的点皆是此树形图的叶子, 这样定义状态是因为只用一维状态对于不同的转移得到相同的树形图这种情况不是很好处理, 而二维状态就可以这样转移: 由mask1中的点向外连边扩展出点v, 那么v必为新的叶子, 此时我们强制v的标号大于mask2中点的标号时再转移, 这样就能做到既不重复也不遗漏地计算. 空间复杂度O(2^2n) 阅读全文
posted @ 2012-02-25 00:25 zcwwzdjn 阅读(412) 评论(0) 推荐(0) 编辑