codeforces
EMber _
人但有追求,世界亦会让路。
展开
-
Codeforces 583C/582A 暴力+gcd
A. GCD Table time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output The GCD table G of size n × n for an array of positive integers a of leng原创 2016-08-15 19:50:35 · 443 阅读 · 0 评论 -
codeforces 417D 状压DP
题意:多读英文题面有助于提高英语~~,要是你真忍不住就看代码下面吧。。一开始觉得n*2^k是不是会GG啊,后来:cf怎么可能连1e8都不能过1e9都能过不是开玩笑的。 然后开始推,明显的设f[i][j]表示前i个状态为j,有: f[i][j|a[i].s]=min(f[i][j]+a[i].cost)f[i][j|a[i].s]=min(f[i][j]+a[i].cost) 有个问题就是他要求原创 2017-09-18 22:10:41 · 551 阅读 · 0 评论 -
codeforces 427C tarjan
题意自不用说,很简单。 tarjan裸题了吧,一开始写了个重构,然后发现很长而且挺难调,想了想直接tarjan找scc的时候顺便统计一下就好,不然重构好像会出事,不过应该是我写错了。 写题的时候哪怕是很简单的题目也要想想怎么写更加短更好调试。#include<cstdio>#include<algorithm>#include<cstring>#define fo(i,a,b) for(i原创 2017-09-25 22:33:03 · 241 阅读 · 0 评论 -
codeforces 413E 线段树
题意:给你一个2*n的矩形,X不可以走,给你一些询问,问你两点之间的最短路. 不是很难的线段树,维护一下左边到右边的四种路径就好。 维护炸了,基本看王队长的代码QWQ#include<cstdio>#include<algorithm>#include<cstring>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for原创 2017-09-15 00:22:54 · 295 阅读 · 0 评论 -
JZOJ5281. 【NOIP提高组模拟A组8.15】钦点 十字链表
经典的十字链表,暴力搞搞就可以了。#include<iostream> #include<deque> #include<cstring>#include<cstdio>#include<algorithm> #define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(int i=a;i>=b;i--)using nam原创 2017-08-15 16:28:21 · 304 阅读 · 0 评论 -
codeforces round428 div 2
像我这种垃圾选手只能跑来搞div 2.。。 rating增加的好慢啊,不知道何年何月能上紫。。。A:暴力傻逼题,开场3分钟切。#include<cstdio>#include<algorithm>#include<iostream>#include<cstring>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(i原创 2017-08-13 10:34:46 · 392 阅读 · 0 评论 -
codeforces 802I 后缀自动机
题意:给你一个字符串,统计他的所有不同子串的出现次数的平方和,n<=100000n<=100000 其实相当于一个SAM的模板题吧。 首先你要理解SAM的存储方式以后就可以轻松切这题。。 SAM建立了一个parent树还有一个DAG,这里显然和DAG没什么关系。 对于parent树上的每个节点,他有一个right集,存储这一些子串的右端点下标,同时还有一个对应区间min(len),max(原创 2017-08-20 15:36:22 · 445 阅读 · 0 评论 -
codeforces 484E Sign on Fence
题意:给你一段序列,每次给你一个询问l,r,w。问你l到r之间值大于等于w的最长连续区间是多大。分析:可以通过二分高度来判断。 显然最终的答案是数组里面的某一个值,那么我们可以把整个序列从大到小排序,然后每个数建一个线段树,a[i]的叶子节点中比他大的就为1否则为0,那么很明显答案就是求连续为1的最大长度,就转化成了经典线段树问题。但是我们不可能建10^5颗线段树,那么可持久化一下就行了。#inc原创 2017-02-23 16:29:41 · 220 阅读 · 0 评论 -
【CF398E】Sorting Permutations(sort)
Description我们有一个是1到n 的排列的序列a1, a2,… ,an。在一秒钟里,我们可以选择一些不相交的数对(u1,v1),(u2,v2),… (uk,vk)并交换所有a_ui 和a_vi,同时对于所有的i 有1<=ui < vi<=n。数对们不相交当且仅当所有的ui 和vi 不相同。我们想要尽快地把序列重新排列成递增顺序。给定初始排列,计算完成排序的方法数。两种方法不同当且仅当有一个时原创 2017-04-08 21:03:22 · 509 阅读 · 0 评论 -
【Srm590】Fox And City(fox)
DescriptionA long time ago, 有一个国家有n 座从0 到n-1编号的城市。城市0 是首都。国家道路网络形成了一个无向连通图。换句话说:某些对城市被双向通行的道路所连接。对于每座城市,可以从城市出发经过一系列连续的道路到达首都。(当两条道路需要在城市外相交时,相交处总是会有一座桥梁,因此城市外并没有路口。)你会获得一个用于描述道路网络的字符矩阵linked。对于每个i 和j,原创 2017-04-08 20:51:19 · 901 阅读 · 0 评论 -
【CF446D】DZY Loves Games(games)
Description今天DZY 想要玩一个古老的游戏。他在一个有n 个房间并有m 个走廊互相连接的大迷宫里(每个走廊都允许双向通行)。你可以认为所有房间都被走廊直接或间接连接。DZY 在迷宫里迷路了。现在他在第一房间并且有k 条命。他将会按如下所述行动:•首先,他会随机抽取一条从他现在所处房间出发的走廊。每个抽取范围内的走廊选中的机率相等。•然后他会沿着走廊走到走廊的另一端,并且回到第一步重复这个原创 2017-04-08 20:47:19 · 1700 阅读 · 0 评论 -
JZOJ4702&codeforces534F 状压DP
题意就不说了。。 不说个毛啊!!!wori我就是题目没看懂所以搞了半天结果搞错了好吗QAQ。。 这里的块如果空间允许一定是两个,如果剩下的空间不足两个才能为1. 。。。。 怎么暴力怎么来。 设f[i][j][a][b][c][d][e]表示第i列,状态为j,5行的块数分别为a,b,c,d,e。 那么转移显然,把之前的全部加上就好了。 对于一个长度为m的行,我们最多能取的块数是m/2+m原创 2017-02-21 17:04:55 · 434 阅读 · 0 评论 -
codeforces 149D Coloring Brackets 区间DP
题意:给你一串括号,每个括号可以涂色,蓝色或者红色或者不涂,问你有多少种方案数,其中涂色有些限制。 1.每对括号有且仅有其中一个被涂色。 2.相邻的括号不能涂相同的颜色,但是相邻的括号可以同时不涂色。那我们怎么做呢。 首先他已经给出了一个合法的括号序列,我们只要找每个左括号右边的第一个右括号就可以了,设dp[l][r][x][y]表示l到r这段区间的答案,l和r的颜色分别为x和y的方案数(0/原创 2017-02-18 16:56:46 · 667 阅读 · 0 评论 -
codeforces 721C DAG上dp
题意:给你一个有向图,让你求从1走到n最多能经过多少点,权值和小于t. n<=5000。 分析:这其实就是一个DAG上求最短路最长,dp就可以了,暴力一点,设f[i,j]表示从1-i走过j个点的最小时间。注意有可能是环所以dfs到n的时候直接退出。方案的话随便记录一下就行了。#include<cstdio>#include<algorithm>#include<cstring>#inclu原创 2017-02-18 09:55:01 · 326 阅读 · 0 评论 -
Codeforces 526F 分治
说实话这题挺简单的(知道题解以后),但是一般人做的时候脑洞不大一点还不一定做得出来。 显然,题目可化简为:给定 N 个数的一个排列,问这个序列中有多少个子区间的数恰好是连续的。 进一步可以化为:有多少种情况使得,相邻的 k 个数中最大值和最小值的差小于等于 k-1。 大致有两种解法,一种是分治,一种是线段树。 这里主要讲一下分治的解法。 考虑分治,对于当前区间[L,R],记区间中点为 mi原创 2016-08-13 21:01:11 · 860 阅读 · 0 评论 -
codeforces 832D Misha, Grisha and Underground 倍增lca
题意:给一棵树,给出q个询问,每次a,b,c三个点,选择出一个点,使得这个点到其他两个点的公公路径最长。 明显分类讨论,像某人(@SFN1036)一样搞结论是行不通的(○´・д・)ノ。 讨论一下任意两个点的路径,肯定是lca嘛,根据lca的性质,肯定深度比两个点都要小,那么公共路径的话就是(dis(a,b)+dis(b,c)-dis(a,c))/2+1,这个很显然了。 一开始还想过是不是有可能原创 2017-09-27 21:00:43 · 523 阅读 · 0 评论