随笔分类 -  hihoCoder

摘要:题意: 有一个环形序列,可以将其切成连续的k段子序列,那么gcd( 每段子序列的和 )就是优美程度。输出n个整数,表示当k=[1, n] 时的最大优美程度。思路: 观察一下,当切成1段的时候,gcd就是sum[整个序列],为最大。考虑切成2段,那么最好就是能让这个环切成2段和为sum[整个序列]... 阅读全文
posted @ 2015-11-02 14:31 xcw0754 阅读(280) 评论(0) 推荐(0)
摘要:题意:有一个k*n的棋盘,要求用1*2的骨牌来铺满,有多少种方案?(k 2 #define pii pair 3 #define INF 0x3f3f3f3f 4 #define LL long long 5 using namespace std; 6 const int N=21000; 7 c... 阅读全文
posted @ 2015-09-03 21:20 xcw0754 阅读(435) 评论(0) 推荐(0)
摘要:题意:给一个3*n的矩阵,要求用1*2的骨牌来填满,有多少种方案?思路: 官网题解用的仍然是矩阵快速幂的方式。复杂度O(logn*83)。 这样做需要构造一个23*23的矩阵,这个矩阵自乘n-1次,再来乘以初始矩阵init{0,0,0,0,0,0,0,1}后,变成矩阵ans{x,x,x,x,x,... 阅读全文
posted @ 2015-09-03 17:33 xcw0754 阅读(440) 评论(0) 推荐(0)
摘要:题意:如上图的一块板子,其中部分格子已经亮起,每当按下一个格子,其上下左右及自己共5个格子的亮暗状态会改变(亮变暗,暗变亮)。给定一块板子的初始状态,问要使得每个格子都亮起来,需要按多少次,以及按哪些格子?思路: (1)对于任意一个格子,如果这个格子改变了偶数次状态,则等价于没有发生改变。我们可以... 阅读全文
posted @ 2015-08-16 10:57 xcw0754 阅读(287) 评论(0) 推荐(0)
摘要:题意:便利店老板为了促销,推出了组合包的形式,将不同数量的各类商品打包成一个组合。比如2袋薯片,1听可乐的组合只要5元,而1袋薯片,2听可乐的组合只要4元。通过询问老板知道:一共有N种不同的商品和M种不同的商品组合;每一个组合的价格等于组合内商品售价之和,一个组合内同一件商品不会超过10件。思路:高... 阅读全文
posted @ 2015-07-29 21:16 xcw0754 阅读(326) 评论(1) 推荐(0)
摘要:题意: 写出一个环,环上有2^n个格子,每个格子中的数字是0或1,相连着的n个格子可以组成一个数的二进制,要求给出这2^n个数字的序列,使得组成的2^n个数字全是不同的。(即从0到2^n-1)思路: 构造一个图,但是只需要考虑边,每条边假设为n个0/1组成的串,即此图有2^n条边,每边代表1个数... 阅读全文
posted @ 2015-06-23 17:18 xcw0754 阅读(212) 评论(0) 推荐(0)
摘要:题意: 给定一个图,要求打印出任一条欧拉路径(保证图肯定有欧拉路)。思路: 深搜的过程中删除遍历过的边,并在回溯时打印出来。在深搜时会形成多个环路,每个环都有一个或多个结点与其他环相扣,这样就可以产生欧拉路径。 1 #include 2 using namespace std; 3 const... 阅读全文
posted @ 2015-06-17 22:35 xcw0754 阅读(278) 评论(0) 推荐(0)
摘要:题意:给出n个岛,每个岛都有桥到达其他岛,且桥数可多可少(即使两岛有多桥),判断是否是欧拉路(即每条桥只能走一次,所有桥都能遍历1遍)。思路:满足如下条件之一者即为欧拉路:1、连通图,每个岛的度数为偶数。2、连通图,其中仅两个岛的度数为奇数,其他都是偶数。 1 #include 2 using n... 阅读全文
posted @ 2015-06-17 22:28 xcw0754 阅读(239) 评论(0) 推荐(0)
摘要:题意: 给出一个有n个点的无向图,每个点上有石头数个,现在的游戏规则是,设置某个点A的度数为d,如果A点的石子数大于等于d,则可以从A点给每个邻接点发一个石子。如果游戏可以玩10万次以上,输出INF,否则输出最多能玩几次。思路: 暴力枚举每个可以玩的点,假如可以玩无限次,且当前状态为Z(指所... 阅读全文
posted @ 2015-06-17 22:19 xcw0754 阅读(179) 评论(0) 推荐(0)
摘要:题意: 给定一个拓扑图,其中部分结点含有1个病毒,每个结点只要收到病毒就会立即往出边所能到达的点传播,病毒数可叠加,求所有结点的病毒数总和。思路: 根据拓扑的特点,每个入度为0的点肯定不会再被传播病毒,而且会将自己的所有病毒向与其相连的结点传播。那么可以从入度味为0的点着手,逐个删除入度为0的结... 阅读全文
posted @ 2015-06-01 18:51 xcw0754 阅读(221) 评论(0) 推荐(0)
摘要:G++261ms13MB题意: 给出n门课程的修读所需要的前置课程的关系,按理说应该是个拓扑图,但是因为某些原因导致了混乱,所以有可能不是一个拓扑图。现在的问题是,判断该图是否为一个拓扑图(即无环图)。思路: 每次删除全部入度为0的结点,一直删下去肯定是没有任何点存在的,如果不是拓扑图的话就必有... 阅读全文
posted @ 2015-06-01 17:02 xcw0754 阅读(377) 评论(0) 推荐(0)
摘要:题意: 给出几堆石子数量,每次可以取走一堆中任意数量的石头,也可以将一堆分成两堆,而不取。最后取走者胜。思路: 先规矩地计算出sg值,再对每个数量查SG值就可以了。最后求异或和。和不为0的就是必赢。SG打表 1 #include 2 using namespace std; 3 const i... 阅读全文
posted @ 2015-05-19 17:34 xcw0754 阅读(205) 评论(0) 推荐(0)
摘要:题意: 有编号为0~n的n+1个房屋,给出每个房屋的起始价格,随后给出m种修改,每次修改都要进行输出所有房屋的价格总和。修改有两种方式:(1)政府调控,编号L~R全置为同一价格(0)房屋自行涨跌,编号L~R的房屋价格全部涨/跌一部分。思路: 只需要一个tag+浮动的价格就可以解决这个问题了。当t... 阅读全文
posted @ 2015-05-18 20:46 xcw0754 阅读(274) 评论(0) 推荐(0)
摘要:题意:有一块宣传栏,高一定,给出长度,再给出多张海报的张贴位置,问还能见到几张海报(哪怕有一点被看到)?假设海报的高于宣传栏同高。思路:问题转成“给出x轴上长为L的一条线段,再用n条线段进行覆盖上去,最后还能看到及条线”。长度是0~L,即长度是L,进行离散化的时候,应该用1~L,每个数字表示一个单位... 阅读全文
posted @ 2015-05-18 16:09 xcw0754 阅读(445) 评论(0) 推荐(0)
摘要:G++213ms12MB题意:给一个序列,询问时要返回给定区间的和,修改时整个区间都改成一个值。思路: 按提示说的做。线段树,再设置lazy_tag,必要时再修改 查询时遇到tag就将自身分配成两半分别给左右孩子(如果有的话),然后为左右孩子置tag,取消自身的tag。当查询的节点刚好有tag,... 阅读全文
posted @ 2015-05-15 21:48 xcw0754 阅读(240) 评论(0) 推荐(0)
摘要:思路: 两种实现方法: (1)用链表(2)用数组。 1 #include 2 using namespace std; 3 int n, q, L, R, op, P, W; 4 5 struct node 6 { 7 int v; 8 node *ll,*rr; 9 };10... 阅读全文
posted @ 2015-05-15 20:56 xcw0754 阅读(330) 评论(0) 推荐(0)
摘要:G++77ms0MB思路:这题用暴力是最快的,甚至比线段树还佳。 按全部都是查询的来算,是O(n*q)。 1 #include 2 using namespace std; 3 const int N=10010; 4 int w[N], n, q, L, R, tmp; 5 6 int mai... 阅读全文
posted @ 2015-05-15 17:53 xcw0754 阅读(192) 评论(0) 推荐(0)
摘要:ACG++826ms146MB思路: 时间复杂度O(nlogn)。 1 //#include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #in... 阅读全文
posted @ 2015-05-15 17:12 xcw0754 阅读(216) 评论(0) 推荐(0)
摘要:Alice和Bob这一次准备玩一个关于硬币的游戏:N枚硬币排成一列,有的正面朝上,有的背面朝上,从左到右依次编号为1..N。现在两人轮流翻硬币,每次只能将一枚正面朝上的硬币翻过来,并且可以随自己的意愿,在一枚硬币翻转后决定要不要将该硬币左边的任意一枚硬币也翻一次(正面翻到背面或背面翻到正面)。翻最后... 阅读全文
posted @ 2015-05-13 17:58 xcw0754 阅读(246) 评论(0) 推荐(0)
摘要:题意:在一个序列中找到两个数a和b,使得a*b的因子个数最多,输出最多的因子个数。思路:数据较多,处理会很慢。对序列中每个数字进行质数分解求因子个数,然后按照因子个数降序排列,对前50个因子最多的数进行暴力求两两之积的因子个数就行了。1s左右就能出结果。低于50的就会WA了。 1 #include ... 阅读全文
posted @ 2015-05-04 16:24 xcw0754 阅读(214) 评论(0) 推荐(0)