01 2013 档案

摘要:贴个官方解题报告Similarity of necklaces 2这个问题是一个012背包问题。我们知道01背包只要逆向线性检索,无限背包只要正向检索。012背包就是说,每个物品有一个数量上限。这个问题可以用log方法,也存在线性方法,需要维护一个递增/递减序列。我们先把所有的Table都放成下限,接下来我们可以算出它距离总和为0还需要增加多少。对于1<=i<=M,它可以看成这样一个物品:体积为Multi[i],费用为Pairs[i],数量为Up[i]-Low[i]。然后就得到一个012背包问题了。复杂度约为:O(M*背包大小)。其中背包大小不超过M*20*25=200*20*25 阅读全文
posted @ 2013-01-18 17:42 yefeng1627 阅读(359) 评论(0) 推荐(0)
摘要:大致思路是从根节点DFS下去后,处理完子树信息后,合并然后得出根节点信息,但是这一题子节点信息的合并确实比较棘手.如果我们尝试把从当前根节点走K步得到最大苹果数,划分为如下两种: go[t][i]代表节点t的所有子树上走i步不返回,取得的最大苹果数 bk[t][i]代表节点t的所有子树上走i步并返回,取得的最大苹果数 数组二维go,bkgo[t][i]代表节点t的所有子树上至多走i步不返回,取得的最大苹果数bk[t][i]代表节点t的所有子树上至多走i步并返回,取得的最大苹果数求节点为x,实行不断合并子树求最优值当前合并到了q棵子树:go[x][i]就是这q棵子树上至多走i步不返... 阅读全文
posted @ 2013-01-17 22:21 yefeng1627 阅读(311) 评论(0) 推荐(0)
摘要:对于一颗以 rt 为根的树,其有 I 个子节点分别为 S1,S2,。。。,SI ,则 状态 dp(i,j)表示前 1,2,,,,,I 子树,组合而成一棵 包含 J个节点的 子树的最小花费 sum(Si) 表示 以 Si 节点为根的子树,节点数量 Cut (Si, K) 表示 子树 Si 中取得 一棵包含 根Si 的子树 且节点数量为 K 的最小花费 则状态转移方程: 其中 x <= Sum(Si), 且 注意到, 其实我们已经把 子树S1,S2,,S(i-1) 合并到了 dp(I-1)里头去了。这样就简化了枚举计算。 另外,还可以注意到 ... 阅读全文
posted @ 2013-01-17 17:12 yefeng1627 阅读(374) 评论(0) 推荐(0)
摘要:1、如果田忌剩下的马中最强的马都赢不了齐王剩下的最强的马,那么应该用最差的一匹马去输给齐王最强的马。 2、如果田忌剩下的马中最强的马可以赢齐王剩下的最强的马,那就用这匹马去赢齐王剩下的最强的马。 3、如果田忌剩下的马中最强的马和齐王剩下的最强的马打平的话,可以选择打平或者用最差的马输掉比赛。 设表示齐王按从强到弱的顺序出马和田忌进行了i场比赛之后,从“头”取了j匹较强的马,从“尾”取了i-j匹较弱的马,所能够得到的最大盈利。 状态转移方程如下: 注意边界条件的判定View Code // Code by yefeng162... 阅读全文
posted @ 2013-01-17 12:41 yefeng1627 阅读(338) 评论(0) 推荐(0)
摘要:浅谈贪心思想在动态规划中的应用 -----黄劲松 论文中的例题,其中也附有详接 讲讲自己的理解吧. 题目所求为, 使用某种特定策略,使从根节点rt ,依次到每个叶子节点最少步长. 再除以叶子节点数量. 即为最终期望值. 对于一个以 rt 为根的子树上, 我们将其分为 House在子树rt上的步长总数Fa , 以及不在子树上步长总数Fb: 表示 House 在 该rt为根子树上的 步长总数 表示House 不在 该rt为根子树上的 步长总数 表示 该子树上 叶子节点数量 则所求期望为: 若节点 u, 有 k 个子节点, 按照 s1... 阅读全文
posted @ 2013-01-16 22:16 yefeng1627 阅读(522) 评论(0) 推荐(0)
摘要:我们把 放置在 第 I 行的炮兵 称为 I 行炮兵, 通过观察我们可以得出, 第I行炮兵只受 I-1 行,I-2行的 放置情况影响. 对于第Y列,有三种情况: P[x] = 0, i-1 行 空 i-2 行 空 P[x] = 1, i-1 行 空, i-2 行放置了炮兵 P[x] = 2, i-1 行 放置炮兵 (因为 此行放置了炮兵, 哪怕 I-2行 空,对于 I行而言,也毫无意义) 因为这题与 1038不同, 若当前位置为平原, 只影响当前层,而对下一层无影响,所以我们不能将 平原和高山 情况合并到状态中, 其实直接单点考虑也没事. ... 阅读全文
posted @ 2013-01-16 15:37 yefeng1627 阅读(516) 评论(0) 推荐(0)
摘要:把底边贴着第 x 行底边放置的芯片 称为第 x 行芯片。 由于芯片长度只有 3, 所以第 x 行芯片的放置只受 x-1行 和 x-2 行放置情况的影响。 同时由于一旦 方格 (x-1, y)被黑色记号或其他芯片 占据,则方格(x-2,y)即便空闲对第 x行芯片的放置也毫无意义。 所以,只需记录的状态只有: 一, a[x] = 0 表示方格(x-1,y)空闲,方格(x-2,y)空闲 二, a[x] = 1 表示方格(x-1,y)空闲,方格(x-2,y)被占据 三, a[x] = 3, 表示方格(x-1,y)被占据 意味着对于 I 层, 其状态 J, 保存着 I,I-... 阅读全文
posted @ 2013-01-15 20:17 yefeng1627 阅读(1934) 评论(0) 推荐(1)
摘要:状态表示 前 i 行状态为 mask的 合法方案数量 状态转移方程为 其中 状态 j,k 满足条件 j & k = 0, j & ( j <<1) = 0, k & ( k <<1 ) = 0 ,且 J,K状态种植点合法 因为两层间种植的点, 不可以上下相邻 所以有 J&K = 0 因为同层间,种植点不可 两两相邻, 所以有 J & ( J << 1 ) = 0 , K & ( K << 1 ) = 0 再而, 对于当前层, 某些点不可以 种植, 某些可以种植, 因为只有12位, 我们可以映射到一个 阅读全文
posted @ 2013-01-14 22:20 yefeng1627 阅读(190) 评论(0) 推荐(0)
摘要:dp(t,x,y) 表示 t时刻,锤子放到 (x,y) 点,打地鼠最高分 状态方程: dp(t, x, y) = Max { dp(t,x,y),dp(t-1,x1,y1)+ sum(x,y,x1,y1) } 其中 sqrt( (x-x1)^2 + (y-y1)^2 ) <= d, sum(x,y,x1,y1)表示 以 (x,y),(x1,y1)为端点的线段上 地鼠数量 对于 已知两端点 (x1,y1),(x2,y2)的线段,求其线段上 合法点个数,有多种方式: 一, 利用 直线方程来解, 若 x1==x2 或 y1 == y2 斜率不存在的特殊情... 阅读全文
posted @ 2013-01-14 20:24 yefeng1627 阅读(246) 评论(0) 推荐(0)
摘要:因为 除了终点外,中途点 位置 高度皆为 Y[1], 我们可以通过 横坐标唯一确定当前状态 所以 定义状态: DP(I,K) 表示经过 第I栋 Building 移动到 K位置,最小 swap次数 则 转移方程为: 注意到, 因为我们是从 I = 1, 2, 3. ... ,N 顺序处理, dp(k)位置保存着 最优值, 所以第一维 I 我们可以省去 得到转移方程: 对于处理到 第I栋时, 枚举 Xi 到 最大横坐标 ,注意 非法状态的判定, 因为都是顺序处理的,若目前不合法,则后面状态也不合法解题代码View Code #include<stdio.... 阅读全文
posted @ 2013-01-14 15:24 yefeng1627 阅读(268) 评论(0) 推荐(0)
摘要:题目大意: 一个 R*C的矩阵,每个格子内有两种矿yeyenum和bloggium,并且知道它们在每个格子内的数量是多少。 如图所示,最北边有bloggium的收集站,最西边有 yeyenum 的收集站。 传送带只有一个方向直达收集站才有效,不可转弯。 现在要你在这些格子上面安装向北或者向西的传送带(每个格子自能装一种)。问最多能采到多少矿(yeyenum+bloggium)? 定义状态 dp(I,J)表示 前I行,J列,Y+B矿最大值 因为对于任一矿地添加 传送带,仅当其 连接带对应 边界的 收集站时,才有效,且不可弯曲, 所以,对于当前一点 (I,J),其包... 阅读全文
posted @ 2013-01-13 18:06 yefeng1627 阅读(307) 评论(0) 推荐(0)
摘要:不得不说这题,为什么习惯把 X轴,Y轴 颠倒过来........ 假设 S(X,Y) 表示以 (1,1)为左上角坐标, (X,Y)为左下角的矩形内部 树的数量, 那么有 S(X,Y) = S(X-1,Y)+ S(X,Y-1) + Vis(X,Y) // Vis 表示 X,Y点是否有树,若有则为1,否则为0 我们可以通过 O(N*M)时间预处理出 S(X,Y) 然后对于 DP(X1,Y1,X2,Y2) : 以(X1,Y1)为左上角,(X2,Y2)为左下角的 矩形内部 树数量,有 DP(X1,Y1,X2,Y2) = S(X2,Y2) - S(X2,Y1-1)-S(X1... 阅读全文
posted @ 2013-01-13 14:35 yefeng1627 阅读(223) 评论(0) 推荐(0)
摘要:对于 串 Str(I,J)构成 回文串, 一,其可以由 子串Str(I+1,J)构成的回文串 D(I+1,J) 再通过在最右添加字符S(I)构成 二,也可以由 字串Str(I, J-1)构成的回文串 D(I, J-1) 再通过在最左边添加字符 S(J)构成 三,当 S(I) == S(J)时,两个边界不花费总是最优,我们可以由 子串Str(I+1,J-1)构成的回文串 D(I+1,J+1)构成 所以,可以定义状态 DP(I,J)表示 串 Str(i,j)构成回文串最小花费 转移策略: 一, DP(I,J) = Min { DP(I+1,J)+cost(i), ... 阅读全文
posted @ 2013-01-13 13:50 yefeng1627 阅读(170) 评论(0) 推荐(0)
摘要:一, 将C个顶点排序后枚举两点构成直线,然后求最值. ( 排序后枚举,可减少重复枚举 ) 二, 我们枚举两点 (i, j ) ,因为我们排序后 (Xi,Yi)都比(Xj,Yj)都小,我们假定 Point(i) 作为跳进稻田路径的第一个点,这样,我们在之后枚举到相同路径的顶点时,就无需重复计算。 三,跳跃距离(dx,dy)向量相同,我们用 bool vis[5000][5000] 来标记合法点,当未跳出稻田且该点不合法则结束。解题代码:View Code #include<stdio.h>#include<string.h>#include<stdlib.h> 阅读全文
posted @ 2013-01-12 22:25 yefeng1627 阅读(242) 评论(0) 推荐(0)
摘要:将方差公式转换 : 方差: 均值: 得到: 我们知道 均值 X 为定值,与如何划分无关, 所以上述公式, 仅与 有关. 那么我们可以通过求出最优的, 即可求出最优 方差值. 因为对于任意矩形,我们可以通过 其左上角,右下角 坐标来唯一确定,且要保证结果无后效性,我们增加一维切割次数N 定义状态 DP(N,X1,Y1,X2,Y2) 为将 矩形(X1,Y1,X2,Y2)划分N次 的最小 平方值和 则根据题目得到 对于当前状态 DP(K,X1,Y1,X2,Y2) 对于 矩形 (X1,Y1,X2,Y2) ,依据题目要求只可在边缘切割,所以我们的切割方案分... 阅读全文
posted @ 2013-01-12 16:58 yefeng1627 阅读(261) 评论(0) 推荐(0)
摘要:状态 dp( i, j ) 表示 拿出i块巧克力,桌面上剩余j块的概率 若再拿出一块巧克力,则可能出现两种情况 一,一种是,从 桌面已出现的 J 种取 一种,然后被吃掉,则桌面总数量减少1,得到状态 dp(I+1,J-1),概率为 DP(I,J)*J/C, 二,一种是,从 桌面上未出现的C-J种取 一种,然后桌面数量增加一个,得到状态DP(I+1,J+1),概率为DP(I,J)*(C-J)/C 注意到 第一种情形出现的条件是 J-1 >= 0 ,第二种出现条件为 J+1 <= C 另外,我们知道当 M 》 C ,以及 M,N奇偶性不同时,概率必定为0. 至于N = 1e... 阅读全文
posted @ 2013-01-11 22:14 yefeng1627 阅读(361) 评论(0) 推荐(0)
摘要:解题报告转摘录自: jian1573 原文链接:http://www.cnblogs.com/jian1573/archive/2013/01/11/2857010.htmlIDOriginTitleProblem AHDU 1787AProblem BHDU 1695BProblem CHDU 4279CProblem DHDU 1395DProblem EHDU 1262EProblem FHDU 1576FProblem A 红果果的欧拉函数;View Code View Code #include <iostream> using namespace std; /... 阅读全文
posted @ 2013-01-11 20:46 yefeng1627 阅读(326) 评论(0) 推荐(2)
摘要:神状态题。。。。经波神,旭神轮番普渡,方AC。。。道路崎岖啊。。。 状态 dp( i, j ) 此题状态意义,要能区分重复。 i 个苹果,使用 j 个盘子放置,不同方案数量。 状态转移方程,从 当前是否有盘子空 来区分,这样就不会存在重复情况了。 一,若存在空盘子,则可能分为1,2,3,。。。,J个, 但是状态 dp( i, j-1 ) J-1个盘子放置i个苹果,包含了2,3,。。,J-1个空的情况,所以此时等价于 dp( i, j-1 ) 二,若不存在空盘子,(此时要满足条件 i >= j ) , 那么 每一个盘子放一个苹果后,剩下 I - J 个苹果 放置在 J ... 阅读全文
posted @ 2013-01-11 20:37 yefeng1627 阅读(237) 评论(0) 推荐(0)
摘要:依据题目要求,则任意满足要求的N有如下关系 , 其中 ( x, y, z ) 为自然数 那么我们需要前1500个. 则可以通过枚举 x, y, z 来得出. 问题就转换成了如何枚举 x, y, z 使其不重复,且按照从小到大的顺序得出. 假定,我们已经求得了第 Ai 个 Ugly Number 那么, Ai*2,Ai*3,Ai*5 也必定是 Ugly Number, 这也确实是这样.但是我们想要知道的是其顺序大小关系. 第i个Ugly Number 为Ai, i+1个Ugly Number该如何求呢. 它必定是前面已求得的一个数 Aj, 通过 *2, *3, *5 ... 阅读全文
posted @ 2013-01-11 18:43 yefeng1627 阅读(183) 评论(0) 推荐(0)
摘要:题目题意异常恶心,难以理解...... 呵呵.....不过题意是 Lyush大神 花费一小时看明白后透露给笔者的, 到现在依然YM此大婶当中...... 先说说题目大意: 一颗完全二叉树,有 N ( n <= 1024,且必定为2的整数幂,意味着是一颗完全二叉树 ) 个叶子节点,每一个节点都含有一个长度为 LL ( L <= 1000 ) 的串 ( 串仅由大写字母构成), 现仅仅知道N个叶子节点串的组成.其他节点串不知道. 但我们知道,直接父节点相同的两个子节点,其对应位置不同则花费为1. 整棵树花费最小. 让你求,整棵树的最小花费, 以及根节点的可能串元素... 阅读全文
posted @ 2013-01-11 17:04 yefeng1627 阅读(349) 评论(1) 推荐(0)
摘要:解决此类问题常见思路: 为求以 A1, A2, ... , AK 为前K项的所有栏杆字典排序第K小的序列. 这里给出其他牛人的介绍先抛开此题,用最简单的全排列问题来说明这种方法。如1,2,3,4的全排列,共有4!种,求第10个的排列是?先试首位是1,后234有3!=6种<10,说明1偏小,转化成以2开头的第(10-6=4)个排列,而3!=6 >= 4,说明首位恰是2。第二位先试1(1没用过),后面2!=2个<4,1偏小,换成3(2用过了)为第二位,总编号也再减去2!,剩下2了。而此时2!>=2,说明第二位恰好是3。第三位先试1,但后面1!<2,因此改用4。末位则是 阅读全文
posted @ 2013-01-10 18:48 yefeng1627 阅读(179) 评论(0) 推荐(0)
摘要:状态 dp[i][j] 表示 第i根柱子,高度为j的最小花费 转移方程 dp( i , j ) = Min { dp( i-1, k ) + | k - j | * C + ( j-a[i] )*( j-a[i]) } 如果我们 枚举 j 和 k, 因为 都小于 100, 时间复杂度也有 O( 10^9 ), 1000 ms也不够. 我们可以把绝对值拆分开来: 当 j >= k 时: dp( i, j ) = Min{ dp( i-1, k ) - k*C + j*c + ( j-a[i])^2 } 当 j <= k 时: dp( i, j ) = ... 阅读全文
posted @ 2013-01-09 18:55 yefeng1627 阅读(223) 评论(0) 推荐(1)
摘要:将题目转换题意, 有一个M列的墙, 我们需要 使用 1*2 的小矩形 砌成N层高, 有多少不同的方案数量. 因为只有1*2的砖头, 且只有竖立或者横着放. 那么我们规定 竖立放置的砖头属于 较高的一层, 且 当前点放置砖头则为1,否则为0 那么我们可以得出结论: 对于 I 层 状态 X , 若当前位置为0,则下层必定为1. 则意味着下层必定包含 t = (~X)& Mask 对于 I+1 层 状态 Y, 除了包含 状态 t 之外, 剩下标记为1的 必须两两成对.才可符合状态. 注意 t = (~X)& Mask 这里要记得还要与 总集合MASK相与. 把状态限定在MASK... 阅读全文
posted @ 2013-01-09 12:07 yefeng1627 阅读(235) 评论(0) 推荐(0)
摘要:设定状态 DP( i, j ) 表示从第一层到 i 层 j 房间 最小花费. 则状态转移方程为 DP( i, j ) = Max { DP( i-1,j), DP( i, j-1 ), DP( i, j+1 ) } + a( i , j ) 因为 对于当前层的处理, 左右之间可以拆分开来处理, 再设定一个 d( i, j ) 记忆是由哪个位置走到当前位置的. 然后通过递归求路径即可解题代码View Code #include<stdio.h>#include<string.h>#include<stdlib.h>typedef long long LL;#d 阅读全文
posted @ 2013-01-08 22:12 yefeng1627 阅读(225) 评论(0) 推荐(0)
摘要:当总数量 N 为奇数的时候, 因为N为奇数,N+1变成1,同样为奇数. 则意味着奇偶位置可以相互转换. 但是当N为偶数的时候,因为N为偶数,N+1变成1,转换成了奇数. 奇数位置,和偶数位置不相关. 因为我们的置换规则是 奇数位置和奇数位置对换, 偶数位置和偶数位置对换. 那么当N为奇数时,可以转换成任意形态. 但是当N为偶数时,仅仅当奇数位置上的黑点数量与偶数上的黑点数量相差小于等于1的时候,才可转换成符合条件的情况.解题代码View Code #include<stdio.h>#include<string.h>#include<stdlib.h>int 阅读全文
posted @ 2013-01-08 17:52 yefeng1627 阅读(173) 评论(0) 推荐(0)
摘要:定义结构体 struct Dir { vector< Dir > dir; vector< string > file; }; 通过递归处理, 和输出 就很方便了。 要注意,当出现子目录时,递归下去处理,回朔后再将其加入到父目录的vector中,不然没有保存到之后的信息。解题代码:View Code #include<algorithm>#include<iostream>#include<vector>#include<string>#include<stdio.h>using namespace std;s 阅读全文
posted @ 2013-01-08 17:48 yefeng1627 阅读(217) 评论(0) 推荐(0)
摘要:保存下当前点能走的最大步长,当下次从其他点走到该点,则能够立即判定步长. 因为起点不一定, 以及 走一次不一定能走完所有位置. 但是,每次从最高点走,总是好的.能够走的更多. 每次选择没有走过的记忆化搜索.就OK了. 注意,a[i][j]可以取0, 所以dp应该初始化小于0解题代码#include<stdio.h>#include<string.h>#include<stdlib.h>#include<vector>#include<iostream>#include<algorithm>using namespace s 阅读全文
posted @ 2013-01-07 20:18 yefeng1627 阅读(149) 评论(0) 推荐(0)
摘要:因为 N = 100, 最大子矩阵行与行之间相邻,我们可以 O(N*N)内枚举子矩阵由哪些行组成,然后把多行合并成一行后,当一维数组求连续子序列和。时间复杂度接近 O(N*N*N) = 10^6解题代码:#include<stdio.h>#include<stdlib.h>#include<string.h>const int inf = 0x3fffffff;int a[110][110], b[110];int dp[110], ans, n;int main(){ while( scanf("%d", &n) != EOF) 阅读全文
posted @ 2013-01-07 20:14 yefeng1627 阅读(263) 评论(0) 推荐(0)
摘要:题目大意 一颗含有N个顶点的树,节点间有权值, 节点分为黑点和白点.问题是 找一条黑点数量不超过K个的最大路径.解题思路: 因为路径只有 过根节点以及不过根节点, 所以我们可以通过找寻树重心分治下去. 问题就退化成了处理: 对于当前以 x 为根的树, 其最大路径 对于X的所有直接子节点, 定义函数 G( I, J ) 表示子节点 I为根的树不超过J个黑点的最大路径. 定义函数 dep( i ) 表示以 i为根的树,最多黑点数量. 则结果为 ans = MAX{ G(u,L1) + G(v,L2) } ( u != v, 且 L1+L2 <= K - (当前根节点... 阅读全文
posted @ 2013-01-07 17:09 yefeng1627 阅读(1205) 评论(2) 推荐(0)
摘要:最终结果为奇数,所以必败点是奇数情况. 因为报下一天或者下一个月都是奇数转换成偶数,或者偶数转换成奇数. 意味这得到的数字是一个奇数,则必败. 有两个特殊情况. 就是 9,30 和 11.30 ,当前都是奇数形式,下一天同样保持奇数形式,但是下个月则变成偶数. 所以在这里可以改变自己面临的 必败局面. 解题代码:View Code #include<stdio.h>int main(){ int T, a,b,c; scanf("%d",&T); while( T-- ) { scanf("%d%d%d",&a,&b, 阅读全文
posted @ 2013-01-06 22:48 yefeng1627 阅读(180) 评论(0) 推荐(0)
摘要:题目链接: www.acmore.netProblem A 遍历数组a, 对于每一个元素 a[i], 统计区间 ( a[i], a[i]+d ] 有X个点,则符合条件的为 C(2,X) 累加就可以了解题代码View Code#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#include<vector>#include<map>using namespace std;typedef long long LL;const int 阅读全文
posted @ 2013-01-05 18:15 yefeng1627 阅读(193) 评论(0) 推荐(0)
摘要:POJ动态规划题目列表声明: 1.这份列表当然不是我原创的,从文库里下载了一份,放到这里便于自己浏览和查找题目。 2.经过了半个多月的努力,我总算把POJ搜索题列表里的题目刷的差不多了,这周开始练习动规。 3.红色的是我已经做过并AC的题,多半部分可以在本空间找到题解;蓝色是我做过但是还没有AC的题。※最近更新:Poj斜率优化题目1180,2018,3709列表一:经典题目题号:容易: 1018,1050,1083,1088,1125,1143,1157,1163,1178,1179,1189,1191,1208,1276,1322,1414,1456,1458, 1609,... 阅读全文
posted @ 2013-01-04 22:00 yefeng1627 阅读(207) 评论(0) 推荐(0)
摘要:我们根据置换群的性质,知道其经过 K 次置换回到最初位置,此时 K,为N元组的循环因子 a1,a2,...,ai 的最小公倍数。 现在题目要求输入N,求出最大的K,当K情况不唯一,则输出字典序最小,那么题目就转换成将 N 分解成 X个数,其最小公倍数最大的情况了。 这里关于分解N的处理,也是参考一神牛,(再次ORZ一下) 因为 N <= 100 ,我们可以使用 DP 来得到。 F[ i ][ j ] = Max { F[ i ][ j ] , LCM( F[ i-k ][ j ], k ) } 定义 F[ i ][ j ] 表示 和为 i 分解为 j 个数时 的最小公倍数最大的值... 阅读全文
posted @ 2013-01-04 21:50 yefeng1627 阅读(226) 评论(0) 推荐(0)
摘要:无聊水水题。发现水题也不水,我勒了去....import java.math.*;import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner cin = new Scanner( System.in ); BigDecimal R, c; int n; while( cin.hasNext() ) { R = cin.nextBigDecimal(); ... 阅读全文
posted @ 2013-01-04 17:40 yefeng1627 阅读(149) 评论(0) 推荐(0)
摘要:有点无聊,AC水题玩..... 这道题的大致意思: 圆表示一块面积可扩展的区域,开始时,面积是0,在(0,0)处开始以每年50平方米的速度同样呈半圆扩展,输入一个正整数N,然后输入N对坐标,对于每一对坐标值:求出面积扩展到该点的年数,坐标值单位为米。 则年份数为, Pi*( sqrt(x*x+y*y) )^2 / (50*2) 向上取整View Code #include<stdio.h>#include<math.h>const double Pi = 3.1415926;int main(){ int T; scanf("%d",&T); 阅读全文
posted @ 2013-01-04 16:31 yefeng1627 阅读(193) 评论(0) 推荐(0)
摘要:若置换循环因子阶数分别为 ( a1, a2, ..., ak ) , 则最少交换次数为 (a1-1)+(a2-1)+...+(ak-1)解题代码View Code #include<stdio.h>#include<string.h>#include<stdlib.h>const int N = 10010;int a[N], n;bool vis[N];int check( int s ){ for(int i = s; i <= n; i++) if( !vis[i] ) return i; return -1;}int main(){ int T 阅读全文
posted @ 2013-01-04 15:00 yefeng1627 阅读(157) 评论(0) 推荐(0)
摘要:根据题意,N个编号祭祀,N个房间,每个转盘上有P个数字,且每年保证每个房间有且仅有一个祭祀。 可以转换成 P 个不同的 N元组置换。 其中 为第i天祭祀位置,为第 i 天转盘置换 则 第i天 祭祀所在的房间为 (为什么是先D后T,因为置换的乘法是连接,先后) 题目要求 经过 Y天,得到单位置换, 且总共P个不同的置换所以我们可以得到如下形式: (其中 e 为单位置换) 假设 Y mod p = k , 则可表示成如下形式: 再转换一下: 令 x = (y - k )/ p , , 得到 上式转换成: 对于 , 我们通过预处理得出,然后枚... 阅读全文
posted @ 2013-01-04 14:35 yefeng1627 阅读(313) 评论(0) 推荐(0)
摘要:输入 A , B, C, k 设 D = 2^k 则存在 ( x, y ) 使 A + C*x = B ( mod D ) => A + C*x = B + D*y => C*x - D*y = B - A 令 a = C, b = D, c = B-A 则转换成线性同余方程 : a * x + b * y = c 使用扩展欧基里德求解即可解题代码View Code #include<stdio.h>typedef long long LL;LL ExGcd( LL a, LL b, LL &x, LL &y ){ if( b == 0 ){ x... 阅读全文
posted @ 2013-01-03 14:59 yefeng1627 阅读(170) 评论(0) 推荐(0)
摘要:给定同余方程组 X = r1 ( mod a1 ) X = r2 ( mod a2 ) ... X = rn ( mod an )求解正整数X, 若不存在输出 -1关于 线性同余方程组求解, 看笔者前一篇博客关于求解方式,模板裸题#include<stdio.h>typedef long long LL;LL ExGcd( LL a, LL b, LL &x, LL &y ){ if( b == 0 ) { x=1;y=0; return a; } LL r = ExGcd( b, a%b, x, y ); LL t = x; x = y; y = t - a/b. 阅读全文
posted @ 2013-01-03 14:40 yefeng1627 阅读(302) 评论(0) 推荐(0)
摘要:前言:关于区间最值问题的求解,我们一般采用线段树来维护区间最值,得到了O(NlogN)的算法。但对于区间第k值问题,我们应该如何解决呢?本文将介绍一种基于线段树思想衍生出来的新结构——划分树,来解决这个问题。1 划分树 其实,划分树和线段树的区别并不大,可以归纳为两点: 1.1 划分树每一个区间[L,R]维护的是一个一维数组[L..R]。 1.2 划分树每一个根结点[L,R]中前[(R-L+1)/2]小的点组成左子树,后[(R-L+1)/2]大的点组成右子树。2 划分树求区间k值 我们首先修改一下思考方式,原问题变成在已经sorted的数列中找出第k个在区间[s,t]中的数字。 先给... 阅读全文
posted @ 2013-01-03 12:37 yefeng1627 阅读(402) 评论(0) 推荐(0)
摘要:维基百科介绍:http://en.wikipedia.org/wiki/Kdtree KD树是一种能在 O(N)时间内把平面划分成若干个区域,然后在均摊 O(logN)的时间内找到某个区域内所有点的数据结构。其思想是,每次把当前处理的区域按照点数分成两部分,然后对两部分进行递归处理。。。分成两部分有两种策略: 一种是横着竖着横着竖着交替划分。。 一种是把坐标跨度大的那一维划分成两部分。似乎没什么影响。上图是一种可行的划分方式。每次找到当前处理点集中的中点,以这个中点为分界线把区间划分成两部分和。注意中点是作为分界线不参与下一轮处理。查询一个点的最近点时,首先令最近距离为,然后在KD树中查... 阅读全文
posted @ 2013-01-03 12:25 yefeng1627 阅读(853) 评论(0) 推荐(0)
摘要:题目来源IDOriginTitleProblem AHDU 4407SumProblem BPOJ 1845SumdivProblem CPOJ 2480Longge's problemProblem DPOJ 1012JosephProblem EPOJ 1082Calendar GameProblem FPOJ 1099Square IceProblem A 将题目转换下, 我们 定义函数 Sum ( 1, N ) 为 区间[ 1, N ] 与 P 互质的数的和 则 Sum( 1, Y ) - Sum( 1, X-1) 即为 区间 [ X, Y ] 与 P 互质的数的和 再回到本题 阅读全文
posted @ 2013-01-02 22:42 yefeng1627 阅读(285) 评论(0) 推荐(0)
摘要:欧拉函数直接计算公式 欧拉函数的定义: E(N)= ( 区间[1,N-1] 中与 N 互质的整数个数). 对于 积性函数 F(X*Y),当且仅当 GCD(X,Y)= 1 时, F(X*Y) = F(X)* F(Y) 任意整数可因式分解为如下形式: 其中( p1, p2 ... pk 为质数, ei 为次数 ) 所以 因为 欧拉函数 E(X)为积性函数, 所以 对于 , 我们知道 因为pi 为质数,所以 [ 1, pi-1 ] 区间的数都与 pi 互质 对于 区间[ 1, ] ,共有个数, 因为只有一个质因子, 所以与约数大于1 的必定包含 质因子 ... 阅读全文
posted @ 2013-01-02 21:58 yefeng1627 阅读(4499) 评论(0) 推荐(2)

Launch CodeCogs Equation Editor