Gym
文章平均质量分 90
ProLightsfxjh
这个作者很懒,什么都没留下…
展开
-
Gym 100541 B. Sum 分块的技巧、思维题、Interesting
写几个n试试看, 会有连续的数字出现, 比如n == 5, 5 2 1 1 1n == 8, 8 4 2 2 1 1 1 1相当于把这些数据分成好多块, 最多sqrt(n)份,区别于数据结构分块的另外一种分块吧^_^len 表示相同数字的个数, 然后i表示这些相同val (LL)的第一个数的下标, ans + len*val //然后注意每一步取模i += len; //直接跳到下一种val的第一个数其中 len = n / val - i + 1原创 2016-07-26 01:37:07 · 1368 阅读 · 0 评论 -
SGU - 465 Fire Station Building floyd+三分
题意:有n个城市m条双向边,计划在一条道路上建立一个消防局,并且它离城市的距离不能小于R,每个城市i有一个发生火灾的概率pi,要求找出最优的地点,是出警需要的期望路程最小。floyd+三分di表示消防局和j点的最短路程,则期望的路程是 sigma{di * pi},所以枚举每一条可能可以设立消防局的边,然后在这个边的可行区域内进行三分,(这里二分应该是不行的,因为效果并不单调,而是呈现成凹函数)对于当前位置x,边是(u, v),则 di = min{x + dist[i][u], w[u][v] -原创 2017-03-20 22:21:59 · 905 阅读 · 0 评论 -
Gym - 101174K Balls and Needles DFS+建图+复合判断环
题意:给出三维空间的n条边,每个点都是三维坐标,分别判断三维图有没有环,以及投影到xy坐标平面有没有环。dfs对于三维图只要建图后用dfs跑一遍即可, 注意{u = (x, y, z), v = (x, y, z)}这样的边(点)不能放到图上,对于二维图则在不把{u = (x, y), v = (x, y)}不放到图上之外,每次跑dfs的时候还要用unique去重,//sz = unique(sons[u].begin(), sons[u].end()) - sons[u].begin();因为在跑原创 2017-07-20 11:22:51 · 1547 阅读 · 0 评论 -
Gym - 101173J Jazz Journey 图论、枚举贪心、Interesting
题意:给出一个图,要求把图上的所有边按照给出的顺序跑一遍,求最小代价。其中有单向边u->v、v->u, 和方程u->v->u、v->u->v,对于u->v->u必须先走u->v再走v->u但中间可以断开,且可以只走第一步u->v,对于v->u->v同理。图论、枚举贪心、Interesting首先由于对于u->v->u这样可以中间断开,即u->v, v -> x, x - y, y -> v, v->u,所以可以直接把一对(u,v)构成的2种单向边按顺序提取出来,map<pair<int, int>, v原创 2017-07-21 01:16:21 · 1640 阅读 · 0 评论 -
Gym - 100781A Adjoin the Networks 无向图的直径、连通性
题意:给出一个有c个节点e条边的无向图,求添加尽可能少的边使得图连通,并且图的半径(所有点对的最短路径的最大值)尽可能小。无向图的直径先把每个连通块的直径求出来,//这里求直径的方法是 先随机选一个点然后找出距离这个点最远的点,然后选取该点x 作为起点,求距离x最远的点,路径dist[x-y]就是该连通块的直径了。然后如果只有一个连通块,那该直径就是最终的直径如果有2个连通块则,可以把他们的终点连起来如果3个及以上,则先把最大的和第二大的连起来,然后后面的都连到最大的那个连通块的直接中点,并且原创 2017-07-21 23:55:06 · 2164 阅读 · 0 评论 -
Gym - 101174E Passwords AC自动机+额外的限制条件+状态压缩dp
题意:给出n个由小写字母模式串,用大写字母、小写字母、十进制数字构造的长度为[A, B]的字符串,且满足一下限制条件:1、必须有至少一个大写字母至少一个小写字母和一个数字。2、不包含任一模式串(不区分大小写)。3、对于o、i、e、s、t,在模式串时和0、1、3、5、7不区分。求构造出的满足条件的字符串种数。AC自动机+额外的限制条件+状态压缩dp首先这题的原始版本是 给出n模式串,构造不含任一模式串的长度为m的字符串种类数 http://blog.csdn.net/prolightsfxjh/a原创 2017-07-20 00:12:47 · 1979 阅读 · 0 评论 -
Gym - 101164K Cutting 哈希+枚举
题意:给出字符串A和B,字符串A大小写不区分,字符串B由小写字母构成,构成AB的每种字母的个数相同,询问是否能把B切成3份,重构出字符串A,如果能则输出那三份子串,并按照A的顺序输出。哈希+枚举刚开始的时候,以为可以用KMP来过,白白TLE了2发才明白,自己走远了,这题是合适的做法是hash。O(n^2)的枚举字符串B 的0~i-1 为第一段,i~j-1 为第二段,j~n-1为第三锻,然后每次借用这三段的哈希值去和A串匹配,这三段有A(3,3) == 6种排列方式,所以枚举这6种排列,之后借用它们原创 2017-07-25 23:16:17 · 1141 阅读 · 0 评论 -
Gym - 101164C Castle KMP的拓展、next数组+dp、好题
题意:给出原串s,然后有3种操作,1、在s的末尾加上一个小写字母ch;2、把s的拷贝放入set;3、询问在set中的字符串是当前字符串s‘的后缀的个数。KMP的拓展、next数组+dp用构造出的最终串,跑出该字符串的next数组nxt[MAXN],并记录l[i] 为到操作i时字符串s的长度。然后对于操作i = 1 ~ e,如果该操作是type2则标记f[i] = true, 并且对于每个i, u = l[i], ans = sum[u] = f[i] + sum[nxt[u]],然后如果是type三则原创 2017-07-25 23:55:59 · 1221 阅读 · 0 评论 -
Gym - 101173F Free Figurines 思维题+并查集
题意:给出一个序列ai 表示i的父节点是ai, 再给出一个序列bi 表示i的父节点是 bi,求i < ai, ai为0则表示没有父节点,否则ai都不相等,bi同理。只能进行2个操作,1、 把一个没有父节点的节点 作为 一个 没有父节点和子节点的 节点 的子节点, 代价为 1;2、把一个没有父节点的节点的子节点去掉,代价为1;思维题+并查集关键是正确的读懂2个操作,即可,即只能对free的节点进行操作,所以当ai!=bi时,要先把ai拆掉,但必须先满足ai为free才能把i变成free,同理把i插原创 2017-07-21 00:55:05 · 1489 阅读 · 4 评论 -
Gym - 100507H H. Pair: normal and paranormal 栈
题意:给一个字符串,要求把大写字母和小写字母一一配对,要求不交叉。用栈来模拟,不要写挂了就没问题,^_^复杂度 O(n)原创 2017-01-31 19:59:26 · 470 阅读 · 0 评论 -
Gym - 100507G G. The Debut Album 数位dp+内存优化
题意:最多连续a个1,最多连续b个2,构造出长度为n的字符串的个数。数位dp+内存优化dpij0表示在访问字符串的第i为连续j个1时的方案数,dpij1表示在访问字符串的第i为连续j个2时的方案数,sum[i][0]、sum[i][1]表示上访问完第i位时的总方案数。对位1、2分别对于1~a, 1~b, 当j等于1时上一位必定是2故 dp[i][j][0] = sum[i-1][1],其它时候当dpi[j-1][0] 存在时 dpij0 = d[i-1][j-1][0];然后5e4*300*2 *原创 2017-01-31 19:50:26 · 467 阅读 · 0 评论 -
Gym - 101147H H. Commandos DAG
题意:即普通的DAG加了一维。DAG上的dp三维的有向无环图上dp,dp[k][i][j] = max(dp[k][i][j], dp[k][i+1][j] + mp[k][i][j]);dp[k][i][j] = max(dp[k][i][j], dp[k][i][j+1] + mp[k][i][j]);dp[k][i][j] = max(dp[k][i][j], dp[k-1][i][j] + mp[k][i][j]);复杂度 O(n^3)原创 2017-01-31 20:12:42 · 752 阅读 · 0 评论 -
Gym 100541 D. Treasure Box 循环(散乱的前缀+循环体)
在纸上写几组数据, 发现当k一定大以后就会出现循环, 这可以归类于 循环(散乱的前缀+循环体) 哈哈Hash[x] 表示但值为 x 时 增加的值先全部初始化为 -1, 但 x 再次出现时说明开始循环了找到周期, 然后一次性处理掉在周期内的, 然后处理剩余部分原创 2016-07-26 01:56:45 · 1279 阅读 · 0 评论 -
Gym 100952D Time to go back 组合学、杨辉三角预处理组合数
组合学有 n 个礼物, m个朋友, 其中k 个很要好的朋友, 要买 price 大于 d 的礼物领 price >= d 的礼物个数为 cnt则如果用 C[cnt][k] * C[n - k][m - k] 则显然不对, 因为这里面前面选的 price >= d的, 后面给普通好朋友选礼物的时候也会选到, 这样总的买的礼物数来说有大量重复了所以 应该是分步 分类(price >= d 的与 < d 的分开算, 这样就不会相同的礼物选2次了)首先 C[cnt][k] * C[n原创 2016-08-10 01:16:49 · 1861 阅读 · 2 评论 -
Gym 100952E E. Arrange Teams dfs、剪枝
dfs、剪枝首先用 pai[][]布尔数组双向的记录 那些 pair然后void dfs(int k) 表示当前正在处理 队伍 k, 然后遍历 所有 i, j 如果没有访问过, 并且满足条件 则dfs(k + 1)直到顺利的把所以的t个队伍都填进去了, 那一个分枝才ans++; return;剪枝以后的复杂度不大算的出来, 嘿嘿, 但看数据大小 (1 ≤ n,m ≤ 11) and (1 ≤ t ≤ 10) 这样做一般可以pass the tests原创 2016-08-11 01:14:29 · 1017 阅读 · 0 评论 -
Gym - 101102F F. Exchange 贪心、简单题
题意:可以对字符串进行一个操作,把2个字母互换(这2个字母是不同的),一旦互换必须把所有x换成y,所有y换成x,最多可以进行一次这样的操作,求字典序最小的字符串。 贪心、简单题用cnt[i]表示字母出现的次数,用flag[i]表示之前j字母是否出现过,对于每个字母x,则在1~x-1里找之前没有出现过但在整个字符串出现过的字母进行互换,找出后退出循环,之后进行互换复杂度 O(26*n)原创 2017-01-14 21:36:06 · 335 阅读 · 0 评论 -
Gym - 101102A A. Coins 背包问题、数学
题意:在a中选一个子集b中选一个子集,使它们的和为w且abs(sumai - sumbi) <= k,问方案数。背包问题、数学w = sumai +sumbi,da[j]表示a构出和为j时的方案数,db[j]为构出和为j时的方案数。故枚举可能的sumai,然后对应w - sumai,则ans = sigma(da[sumai] * db[w - sumai])然后求da,db的方法是01背包,复杂度 O(n*w)原创 2017-01-14 20:56:34 · 1007 阅读 · 0 评论 -
Gym - 101102B B. The Little Match Girl 贪心、数论、分步
题意:给一串由火柴构成的数字,可以移动火柴改变数字,使得整个数尽可能大,但不能增加或减少数位。贪心、数论、分步每个数字的火柴数分别是a[0] = 6, a[1] = 2, a[2] = 5, a[3] = 5, a[4] = 4, a[5] = 5, a[6] = 6, a[7] = 3, a[8] = 7, a[9] = 6;统计出总火柴数,优先构造出6,此时要判断if(cnt - 6 * i >= (c - i) * 2 && cnt - 6 * i <= (c - i) * 7 && c)即剩原创 2017-01-14 21:16:44 · 1235 阅读 · 0 评论 -
Gym - 101102C C. Bored Judge 线段树+贪心+反向推
题意:给出一系列分数变化情况,x p 表示队伍x获得了p分,求出最终winner在ans事件之后就一直是第一名,求出ans,(如果winner一直是winner,则ans = 1)。线段树+贪心+反向推先计算出每个队伍最终的分数,求出winner的最终分数和队伍编号,然后把每个队伍的分数输入到线段树,用线段数来维护1~n的最大值,存储在team[1]里,然后反向的遍历事件, Modify(ord[i], -p[i]);如果if(team[1] == maxi){ans = i - 1;}一旦不满足就原创 2017-01-14 21:28:21 · 1124 阅读 · 0 评论 -
Gym - 101102J J. Divisible Numbers 位运算+优化+前缀和
题意:给出n个数,然后每次询问l r s,表示在lr区间内有多少个x,是x能被集合s里的至少一个元素整除,s表示一个{1~10}的子集位运算+优化+前缀和可以预处理出前缀和 sum[i][j]表示1~j中能被集合i满足的数的个数,且i为奇数时比有元素1,lr区间内所有的数必定可以被1整除,所以只剩下512中情况故 int sum[512][maxn];读入的时候每次判断v可以被哪些数整除,然后得到集合s,s说表示的集合中所有的元素皆可以整除v,然后用这个s和0~512位于返回非0值则有公共元素,原创 2017-01-14 21:53:10 · 931 阅读 · 0 评论 -
Gym - 101466 J. Jeronimo's List 桶排序
题意:一共n个数字(3<=n<=3e7, 0<=ai<3e7 ),给出前面的m个(3<=m<=min(100, n)),a[i] = (a[i-m] + a[i-m+1]) % MOD,q个询问(1<=q<=1e4),询问a[1,n]里的从小到大第bi大。桶排序先按照要求用a[1,m]构造出a[1,n],然后这里n == 3e7,所以如果采用快速的比较排序算法如归并排序快速排序的时间复杂度是O(nlogn)会超时,因此我们想到可以使用线性排序方法桶排序(或者说计数排序),建一个数组cnt[3e7+8]原创 2018-02-13 20:28:11 · 690 阅读 · 0 评论