HDU 4738 Caocao's Bridges ——(找桥,求联通块)
摘要:题意:给你一个无向图,给你一个炸弹去炸掉一条边,使得整个图不再联通,你需要派人去安置炸弹,且派去的人至少要比这条边上的人多。问至少要派去多少个,如果没法完成,就输出-1。 分析:如果这个图是已经是多个联通块了,那么一个人都不用去,如果不是,那么只要找出这个无向图上的桥并且哨兵数量最少的那座把它炸了就
阅读全文
2016 Multi-University Training Contest 4 部分题解
摘要:1001,官方题解是直接dp,首先dp[i]表示到i位置的种类数,它首先应该等于dp[i-1],(假设m是B串的长度)同时,如果(i-m+1)这个位置开始到i这个位置的这一串是和B串相同的,那么dp[i]还应该加上dp[i-m],因为从i-m+1开始可以被替换成另外一种意思。详细的见代码吧。我们当时
阅读全文
2016 Multi-University Training Contest 3 部分题解
摘要:1001,只要枚举区间即可。签到题,要注意的是输入0的话也是“TAT”。不过今天补题的时候却WA了好几次,觉得奇怪。原来出现在判断条件那里,x是一个int64类型的变量,在进行(x<65536*65536)的时候,后面的已经爆int了!因为如果写的是int类型他就默认是int类型的。所以要写成(ll
阅读全文
STL漫谈
摘要:从现在开始,想写一个关于STL工具的各种tip类的东西,记录下那些细节,以免以后使用STL工具时出错。 1.关于map,如果需要第一个键值需要放进一个结构体,那么结构体是需要写好其自定义的排序规则的,这一点不妨和set作比较,因为它们的实现方法都是树,为了维持其内部树的结构来实现高效的使用,必须定义
阅读全文
ACM之路(18)—— 矩阵
摘要:矩阵是干什么的呢?一句话来说就是,知道相邻两个函数的递推关系和第一个数,让你递推到第n个数。显然,如果n很大,那么一个一个递推过去是会超时的。所以矩阵就是用来解决这种快速递推的问题的。 比方说斐波那契数列就是一个递推的典型。 先丢题目链接:我是题目! 那么问题的关键就变成了如何找递推关系的中介矩阵t
阅读全文
BestCoder Round #84
摘要:1001,预处理出所有2的幂次数,然后从最大的开始找就行。但是最大的位置应当是从i=min(tot,m)开始,因为如果m很大,比tot还大,那么2^m根本没存下来,或者说num[i]是0,结果就会出现整数除以0的错误了(我一开始就是这样的= =);另外如果m很小,如果n同时很大,不能从tot开始找,
阅读全文
HDU 2177 —— (威佐夫博弈)
摘要:威佐夫博弈奇异态(必败态)的条件是a[k]=[k*(sqrt(5.0)+1.0)/2.0]。暴力找出必败态即可。 代码如下:
阅读全文
2016 Multi-University Training Contest 2 部分题解
摘要:1009,直接贪心,只要让后面的尽量小,第一位和第二位尽量大即可。 1011,直接统计奇数的字母的个数,然后用偶数的个数平均分配到它们上面即可。代码如下: 1 #include <stdio.h> 2 #include <algorithm> 3 #include <string.h> 4 usin
阅读全文
HDU 2176 取(m堆)石子游戏 —— (Nim博弈)
摘要:如果yes的话要输出所有情况,一开始觉得挺难,想了一下也没什么。 每堆的个数^一下,答案不是0就是先取者必胜,那么对必胜态显然至少存在一种可能性使得当前局势变成必败的。只要任意选取一堆,把这堆的数目变成其他堆异或和即可,这样,它们异或一下就是0了(变成了必败态)。所以说,在这题就是,对任意一堆,变化
阅读全文
ACM之路(17)—— 博弈论
摘要:博弈论这方面网上资料庞大,我觉得我不可能写的比他们好,就转载一下我觉得写的不错的博客好了。 首先是三大博弈:巴什博奕,威佐夫博奕,尼姆博奕。博客:三大基本博弈。 然后是强大的sg函数和sg定理:SG。简单的说就是子游戏的sg值异或和为0的话就是必败点。 最后是斐波那契博弈,觉得这个人写的非常不错。斐
阅读全文
2016 Multi-University Training Contest 1 部分题解
摘要:第一场多校,出了一题,,没有挂零还算欣慰。 1001,求最小生成树和,确定了最小生成树后任意两点间的距离的最小数学期望。当时就有点矛盾,为什么是求最小的数学期望以及为什么题目给了每条边都不相等的条件。看了题解以后才明白:“首先注意到任意两条边的边权是不一样的,由此得知最小生成树是唯一的,最小生成树既
阅读全文
ACM之路(16)—— 数位DP
摘要:题目就是kuangbin的数位DP。 先讲C题,不要62,差不多就是一个模板题。要注意的是按位来的话,光一个pos是不够的,还需要一维来记录当前位置是什么数字,这样才能防止同一个pos不同数字的dp值混在一起。直接丢代码: 1 #include <stdio.h> 2 #include <algor
阅读全文
HDU 4635 Strongly connected ——(强连通分量)
摘要:好久没写tarjan了,写起来有点手生,还好1A了- -。 题意:给定一个有向图,问最多添加多少条边,让它依然不是强连通图。 分析:不妨考虑最大时候的临界状态(即再添加一条边就是强连通图的状态),假设这时候的边的数量是F,那么答案就是F-m(m是一开始边的数量)。因此,F越大,答案越大。那么,怎么考
阅读全文
PAT L2-001 紧急救援 —— (多参数最短路)
摘要:和天梯中的直捣黄龙差不多。但是,通过这个问题,我对多参数最短路又有了更深一层的了解。 这题因为点数比较多,所以如果直接用大力学长的在G上dfs找最短路径的条数的话,会TLE,所以需要剪枝。剪枝方法是,在dfs中当遇到dis>d[u]就直接return。具体见代码: 1 #include <stdio
阅读全文
BestCoder 2nd Anniversary
摘要:1001:只要将一个非零数字拆出来,作为小的那个数,另外的数字从大到小排列组成另外一个数字相加即可。代码如下(细节有点多): 1 #include <stdio.h> 2 #include <string.h> 3 const int N = (int)1e7 + 5; 4 5 char s[N];
阅读全文
2016团体程序设计天梯赛-决赛-部分题解
摘要:题目链接:https://www.patest.cn/contests/gplt 第一个卡的题是“到底是不是太胖了”,当时以为卡精度,因为各种eps都过不了。。但是结束后队友说不卡精度,随便一个eps就过了- -,可能是代码写搓了。但是更好的方法是全部变成整数做来规避精度的问题。具体见代码: 1 #
阅读全文
2016多校7.14 Warmup 题解
摘要:先讲1007,是一个数位dp,询问一个区间内,各位数的和是一个素数的数字的个数。其实我并不会数位dp,这题直接套用了上次多校lyf队长的dp代码,改了点返回参数没想到直接AC了。代码如下: 1 #include <stdio.h> 2 #include <algorithm> 3 #include
阅读全文
UVA 11174 Stand in a Line,UVA 1436 Counting heaps —— (组合数的好题)
摘要:这两个题的模型是有n个人,有若干的关系表示谁是谁的父亲,让他们进行排队,且父亲必须排在儿子前面(不一定相邻)。求排列数。 我们假设s[i]是i这个节点,他们一家子的总个数(或者换句话说,等于他的子孙数+1(1是他本身)),f[i]是以i为根的节点的排列种数。那么总的种数为n!/(s[1]+s[2]+
阅读全文
UVA 1393 Highways,UVA 12075 Counting Triangles —— (组合数,dp)
摘要:先看第一题,有n*m个点,求在这些点中,有多少条直线,经过了至少两点,且不是水平的也不是竖直的。 分析:由于对称性,我们只要求一个方向的线即可。该题分成两个过程,第一个过程是求出n*m的矩形中,dp[i][j]代表在这个矩形中终点是到(i,j)这个点的满足题意的直线条数,那么,用dp的话就可以得出递
阅读全文
CodeForces 535C Tavas and Karafs —— 二分
摘要:题意:给出一个无限长度的等差数列(递增),每次可以让从l开始的m个减少1,如果某个位置已经是0了,那么可以顺延到下一位减少1,这样的操作最多t次,问t次操作以后从l开始的最长0序列的最大右边界r是多少。 分析:由题意可以挖掘出两个条件:l~r中最大的值(因为是递增的,即r的值)必定不大于t;同时,t
阅读全文
腾讯2017暑期实习生编程题(3题)
摘要:第一题:给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?输出需要删除的字符个数。 思路:区间DP即可。我一开始想的是统计i~j内可以回文的字符个数,然后ans=len-dp[1][len]; 后来发现没法实现,即使是一个字符也是回文的这种情况也考虑到
阅读全文
UVA 10029 Edit Step Ladders ——(DAG求最长路)
摘要:题意:升序的给出一本若干个单词,每个单词都可删除一个字母,添加一个字母或者改变一个字母,如果任意一个操作以后能变成另外一个字典中的单词,那么就连一条有向边,求最长的长度。 分析:DAG的最长路和最短路在算法竞赛入门里边原原本本有的,结果我现在忘记了,,真是太弱了。。方法就是,用map对应键值(以建图
阅读全文
HDU 4496 D-City —— (并查集的应用)
摘要:给出n个点和m条边,一条一条地删除边,问每次删除以后有多少个联通块。 分析:其实就是并查集的应用,只是前一阵子一直做图论思路一直囿于tarjan了。。方法就是,记录每一条边,然后从最后一条边开始不断的加边,如果用并查集来判断联通块有没有减少即可。 代码如下:
阅读全文
CodeForces 519D A and B and Interesting Substrings ——(奥义字符串)
摘要:题意:给出26个字母每个字母的价值,问字符串中有多少个满足以下条件的子串: 1.子串的第一个和最后一个相同 2.子串除了头和尾的其他字符的价值加起来和尾0 这题普通方法应该是O(n^2),但是在1e5的条件下肯定会超时,所以学习了大力学长奥义的O(n)方法。具体方法也说不清楚,看代码吧,很短,也容易
阅读全文
CodeForces 631D Messenger —— (kmp的应用)
摘要:这题是一个kmp的应用,思路是有,但是代码实现能力太弱,细节考虑不全,敲了很长时间才AC。。 题意:字符串用如下的方法表示,例如aaabbbbcc表示为3-a,4-b,2-c。那么问t串在s串中出现了多少次。这题的字符串总长是很长的,如果扩展为原长再kmp内存都不够。那么只能对缩写的状态进行kmp。
阅读全文
UVA 12501 Bulky process of bulk reduction ——(线段树成段更新)
摘要:和普通的线段树不同的是,查询x~y的话,给出的答案是第一个值的一倍加上第二个值的两倍一直到第n个值的n倍。 思路的话,就是关于query和pushup的方法。用一个新的变量sum记录一下这个区间里面按照答案给出的方式的值,比如说,这个节点的区间是1~3,那么这个节点的sum值就是(1*val[1]+
阅读全文
Palindrome Degree(CodeForces 7D)—— hash求回文
摘要:学了kmp之后又学了hash来搞字符串。这东西很巧妙,且听娓娓道来。 这题的题意是:一个字符串如果是回文的,那么k值加1,如果前一半的串也是回文,k值再加1,以此类推,算出其k值。打个比方abaaba,k值为3,abaxxaba,k值为1。现在,给出一个串,让你求这个串的所有前缀(包括本身)的k值的
阅读全文
Light Switching(SPOJ LITE)—— 线段树成段更新异或值
摘要:题目连接:http://www.spoj.com/problems/LITE/en/。 题意:有若干个灯泡,每次对一段操作,这一段原先是亮的,就关了;原先是关着的,就打开。询问某一段的打开的灯泡的个数。 分析:很显然的成段更新,但是一开始想着用某段是不是相同的来维护,敲了很长时间都没有实现。后来经过
阅读全文
ACM之路(15)—— 字典树入门练习
摘要:刷的一套字典树的题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=120748#overview 个人喜欢指针的字典树写法,但是大力喜欢数组的写法,反正是一个队的,互补一下反而更好- 。-本来前几题我的指针写法都是用new的,后来发
阅读全文
ACM之路(14)—— 线段树的日常(上)
摘要:我的线段树简直有毒,各种错误都能忙上半天。做了kuangbin的线段树专题的一半,还有一半留到以后去做。 链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=66989#overview 总结一下题目吧: A和B都是最简单的线段树,也没有
阅读全文
HDU 4612 Warm up —— (缩点 + 求树的直径)
摘要:题意:一个无向图,问建立一条新边以后桥的最小数量。 分析:缩点以后,找出新图的树的直径,将这两点连接即可。 但是题目有个note:两点之间可能有重边!而用普通的vector保存边的话,用v!=fa的话是没办法让重边访问的,因此,使用数组模拟邻接表的方法来储存边。 这样,只要访问了一条边以后,令E[i
阅读全文
HDU 3394 Railway —— (点双联通,记录块信息)
摘要:这题是比较模板的找点双联通并记录的题目。 题意大概是:一个公园有n个景点,1.所有游客都是绕环旅游的,找出所有不在环内的路的条数;2.如果两个环中有重复的边,那么这些边是冲突的,问冲突的边的总数。 分析:1.即桥的条数;2.找出点双联通分量,在他们内部找重复的边,或者换句话说,找出所有点双联通分量,
阅读全文