摘要:
题意:给出数组A,定义f(l,r,x)为A[]的下标l到r之间,等于x的元素数。i和j符合f(1,i,a[i])>f(j,n,a[j]),求有多少对这样的(i,j).解法:分别从左到右,由右到左预处理到某个下标为止有多少个数等于该下标,用map维护。然后树状数组更新每个f(j,n,a[j]),预处理... 阅读全文
摘要:
题意:两个人A和B在打牌,只有题目给出的几种牌能出若A第一次出牌B压不住或者A一次就把牌出完了,那么A赢,输出Yes,否则若A牌没出完而且被B压住了,那么A输,输出No。解法:知道规则,看清题目,搞清有哪些Trick,就可以直接模拟搞了。详见代码:#include #include #include... 阅读全文
摘要:
令一个点的属性值为:去除这个点以及与这个点相连的所有边后得到的连通分量的节点数的最大值。则树的重心定义为:一个点,这个点的属性值在所有点中是最小的。SGU 134 即要找出所有的重心,并且找出重心的属性值。考虑用树形DP。dp[u]表示割去u点,得到的连通分支的节点数的最大值。tot[u]记录以u为... 阅读全文
摘要:
题意:第i天的天气会一定概率地影响第i+1天的天气,也会一定概率地影响这一天的湿度.概率在表中给出。给出n天的湿度,推测概率最大的这n天的天气。分析:这是引自机器学习中隐马尔科夫模型的入门模型,其实在这里直接DP就可以了定义:dp[i][j]为第i天天气为j(0,1,2分别表示三个天气)的概率,pa... 阅读全文
摘要:
题意:给n个医生,这些医生有一个上班时间,然后给一些病人,病人有一个到达的时间,以及一些诊断,诊断有property(优先级)和duration(诊断时间)这两个属性,每个病人可能要诊断多次,最后问每个病人的全部疗程完成离开医院的时间是多少。分析:用优先队列存储诊断,病人,然后模拟一个诊断过程,完成... 阅读全文
摘要:
题意大概就是八数码问题,只不过把空格的移动方式改变了:空格能够向前或向后移动一格或三格(循环的)。分析:其实跟八数码问题差不多,用康托展开记录状态,bfs即可。代码:#include #include #include #include #include #include #include #inc... 阅读全文
摘要:
题意:x=[-200,200],y=[-200,200]的平面,一天中太阳从不同角度射到长椅(原点(0,0))上,有一些树(用圆表示),问哪个时刻(分钟为单位)太阳光线与这些圆所交的弦长总和最长。太阳距离原点总是500m。(这些圆不会互相相交,每个圆都不包括原点或者不经过原点)解法:直接暴力24*6... 阅读全文
摘要:
题意:一个NxN的网格地板,有一些激光束从天花板垂直射向地面的某个网格,一个圆要安全地从左走到右,不碰到上边界,下边界以及激光束,问这个圆的直径最大能达到多大。分析:可以二分直径,关键在check函数的写法。可以讲这个圆缩成一个点,把圆的直径转化为激光的扫描范围,当激光范围完全堵死一条通道的时候,这... 阅读全文
摘要:
//求取下n环和放上n环的步数int ans;//规则一:第一环可以在任何时候放上或取下环柄。//规则二:只有紧跟在领头环后的环可以放上或取下环柄。(领头环是套在柄上的最前面的环int DownRing(int);int UpRing(int);int DownRing(int n){ int... 阅读全文
摘要:
题意:给n个文件,包括文件名和文件大小,然后给出k个关键词,查询包含该关键词的文件的大小总和。文件名为一些中括号括起的关键词的合集。解法:可用bitset记录每一个关键词在哪些文件中出现,然后查询即可。bitset用法如下:bitset bs;bool is_set = bs.any(); /... 阅读全文
摘要:
题意:给你n(n#include #include #include #include #include #include using namespace std;#define N 207vector vx,vy;map hx,hy;int dx[4] = {0,0,1,-1};int dy[4]... 阅读全文
摘要:
昨天晚上写的,写了一个多小时,9000+B,居然1A了,爽。题意:玩扑克,比大小。规则如下:题意很简单,看过赌神的人都知道,每人手中5张排,比牌面大小,牌面由大到小分别是(这里花色无大小),级别从高到低依次为:1.同花顺:牌面一样,只比较最大的看谁大,一样大则平手2.四条:四个一样的,看这四个一样的... 阅读全文
摘要:
题意:给你一串数字,问这串数字符合f[n] = a*f[n-1],f[n] = a*f[n-1]+b*f[n-2],f[n] = a*f[n-1]+b*f[n-2]+c*f[n-3]这几个方程中的哪个,然后要你给出第n+1项,如果符合多个方程,项数小的优先(第一个方程优先)。解法:这题我先处理看是否... 阅读全文
摘要:
题意:给一个递推式S(n) = a1*S(n-1)+...+aR*S(n-R),要求S(k)+S(2k)+...+S(nk)的值。分析:看到n的大小和递推式,容易想到矩阵快速幂。但是如何转化呢?首先看到我们用A表示上面的递推式中的R*R的那个矩阵,那么对于前面那个向量,每次乘上A^k之后都会变成(S... 阅读全文
摘要:
题意:给n个石头,分成一些部分(最多n部分,随便分),问分完后每部分的数量的乘积有多少种情况。分析:可以看出,其实每个乘积都可以分解为素数的乘积,比如乘积为4,虽然可以分解为4*1,但是更可以分解为2*2*1,所以就可以枚举素因子来分解,dfs即可。代码:#include #include #inc... 阅读全文
摘要:
题意:一些人有朋友关系,在某个人的社交网站上投放广告可以被所有该人的直接朋友看到,问最小投放多少个广告使给出的人都看到广告。(n#include #include #include #include #define Mod 1000000007using namespace std;#define ... 阅读全文
摘要:
题意:有n个星球,每个星球有Ai个人,每次有两种选择,第一是从每个星球上去掉1个人,第二个选择是选择一个星球放置一个科学家,将该星球的人数加倍,问最少多少次能够将所有星球上的人数同时变为0,并且如果步数#include #include #include #include using namespa... 阅读全文
摘要:
题意:n个国家,给出国家间相互的债务关系,每个国家如果债务>收入就要破产,破产后该国的所有债务关系全部清除,第一个破产的国家不同有可能造成最后的没破产的国家的不同,问哪些国家有可能成为独自存活的国家。解法:因为最多20个城市,破产与否的状态可用二进制数表示,破产为1,不破产为0,然后进行搜索,每一个... 阅读全文
摘要:
题意:给一个元素周期表的元素符号(114种),再给一个串,问这个串能否有这些元素符号组成(全为小写)。解法1:动态规划定义:dp[i]表示到 i 这个字符为止,能否有元素周期表里的符号构成。则有转移方程:dp[i] = (dp[i-1]&&f(i-1,1)) || (dp[i-2]&&f(i-2,2... 阅读全文
摘要:
题意:一个展览有n个步骤,告诉你每一步在那个场馆举行,总共2个场馆,跨越场馆需要1单位时间,先给你一些约束关系,比如步骤a要在b前执行,问最少的转移时间是多少。解法:根据这些约束关系可以建立有向边,可以看出是拓扑排序问题,问题是怎样拓扑排序。进行两次拓扑排序,分别建立两个集合,一个放场馆1举行的步骤... 阅读全文
摘要:
题意:给n条直线,将一个平面分成很多个部分,再给m个骑士的坐标,在一个部分内只要有一个骑士即可保护该部分,问给出的m个骑士是不是保护了所有部分。解法:计算每个骑士与每条直线的位置关系(上面还是下面),用0,1表示,所以每个骑士会有一个01串,最后统计出这n条直线分成的部分数(可能有平行的),然后排序... 阅读全文
摘要:
题意:有n个地方,现在要站人进去,而每两个人之间至少要隔k个空地,问这n个地方能站的人数的期望是多少。分析:考虑dp[i]表示 i 个地方能站的期望数,从左往右推,如果i-k-1=1的话,如果第一个人站在第1个位置,那么右边会空出i-k-1个位置,如果站在2位置,那么右边会空出i-k-2个位置...... 阅读全文
摘要:
题意:给n个阳离子和m个阴离子,并给出相互的吸引关系,求一个最大的点集,使其中的每个阴阳离子相互吸引。解法:枚举每条边,使该条边存在,然后建立反图,求一个最大匹配,此时的点数减去最大匹配与ans求一个最大值即可。代码:#include #include #include #include #incl... 阅读全文
摘要:
题意:给你一个传递闭包的矩阵,mp[u][v] = 1表示u可以到达v,为0代表不可到达,问你至少需要多少条边组成的传递闭包符合这个矩阵给出的关系分析:考虑一个强连通分量,如果这个分量有n个节点,那么至少只需要n条边皆可以满足传递闭包(因为此时形成环就可),所以求出所有的强连通分量,将他们缩成一个个... 阅读全文
摘要:
这题又是容斥原理,最近各种做容斥原理啊。当然,好像题解给的不是容斥原理的方法,而是用到Lucas定理好像。这里只讲容斥的做法。 题意:从n个容器中总共取s朵花出来,问有多少种情况。其中告诉你每个盒子中有多少朵花。 分析:其实就是求方程: x1+x2+...+xn = s 的整数解的个数,方程满足: 阅读全文
摘要:
这题被出题人给活活坑了,题目居然理解错了。。哎,不想多说。 题意:给两组数,A组为幸运基数,B组为不幸运的基数,问在[low,high]区间内有多少个数:至少被A组中一个数整除,并且不被B中任意一个数整除。|A|<=15. 分析:看到A长度这么小,以及求区间内满足条件的个数问题,容易想到容斥原理,因 阅读全文
摘要:
题意:由a和b构成的字符串,如果压缩后变成回文串就是Good字符串。问一个字符串有几个长度为偶数和奇数的Good字串。分析:可知,因为只有a,b两个字母,所以压缩后肯定为..ababab..这种形式,所以是good substrings,那么首尾字符肯定相同,于是就好搞了。用:odd[0],odd[... 阅读全文
摘要:
题意:有n个人,m个洞。每个洞能容纳一个人,每个人到每个洞需要花费一些时间。每个人到达一个洞后可以花C的时间来挖一个洞,并且最多挖一个洞,这样又能多容纳一人。求能使至少K个人进洞的最短时间。解法:看到n个人和m个洞,并且人要进洞容易想到二分匹配,又是求极值的问题,应该是最大匹配。由于直接求极值不好求... 阅读全文
摘要:
题意:电脑记录了某一时刻每个赛车的前面和后面个有多少辆车(多个车并排时在别的车那只算一辆),问最少有多少个不合理的数据。分析:看到n=n肯定不行,加上自己就超过n了。否则这个车肯定在(a+1,n-b)这段区间内,所以这段区间内的车子数(cnt[][]记录)++,如果车子数大于区间长度,就不再加了。搞... 阅读全文
摘要:
什么是离散化? ----Matrix67如果说今年这时候OIBH问得最多的问题是二分图,那么去年这时候问得最多的算是离散化了。对于“什么是离散化”,搜索帖子你会发现有各种说法,比如“排序后处理”、“对坐标的近似处理”等等。哪个是对的呢?哪个都对。关键在于,这需要一些例子和不少的讲解才能完... 阅读全文
摘要:
题意:给出一个 n (1 #include #include #include #include #define lll __int64using namespace std;#define N 5007const lll INF = (1LL<<60);lll dp[2][N];lll a[N],... 阅读全文
摘要:
题目大意:求lcm(1,2)+lcm(1,3)+lcm(2,3)+....+lcm(1,n)+....+lcm(n-2,n)+lcm(n-1,n)解法:设sum(n)为sum(lcm(i,j))(1<=i<j<=n)之间最小公倍数的和,f(n)为sum(i*n/gcd(i,n))(1<=i<n)那么 阅读全文
摘要:
题意不说了,概率和期望值要分开处理。方法1:可以先算出到达每层的概率,然后再乘以每层的期望,每层的期望是固定的。方法二:也可以从后往前直接推期望。为什么从后往前呢?因为第i层的时候,它可以跳到的层是不确定的,所以还不能知道那一层的期望,所以不能计算。设dp[i]为从第i层跳到最底层能得到的值的期望,... 阅读全文
摘要:
题意:给一幅地图,P为起点,D为终点,'*'为传送阵,到达传送阵可以传到任意一个其他的传送阵,传到以后可以正常走或者再传回来,问P->D最短步数。分析:这题一定要细心,分析要到位才能搞定,错一点都WA。有两种思路:1.走到一个传送点之后,将所有能传到的地方都加入队列,然后清除传送阵向量(vector... 阅读全文
摘要:
题意:给你一串数字序列,只包含0,1,2,一路扫描过去,遇到2则新开一个2x2的矩阵,然后如果扫到0或1就将其填入矩阵,注意不能四个方格全是0或者全是1,那样跟一个方格没区别,所以21111这种是不可能的,问根据串的数字先后顺序可不可能构造一个矩阵出来,正好把数字都填完,如果可以,输出该矩阵的大小,... 阅读全文
摘要:
Manacher算法首先:大家都知道什么叫回文串吧,这个算法要解决的就是一个字符串中最长的回文子串有多长。这个算法可以在O(n)的时间复杂度内既线性时间复杂度的情况下,求出以每个字符为中心的最长回文有多长, 这个算法有一个很巧妙的地方,它把奇数的回文串和偶数的回文串统一起来考虑了。这一点一直是在做... 阅读全文
摘要:
题意:给出每行每列至少有的灯泡数,问最少有的灯泡数。解法:要使灯泡数尽量小,说明要使交叉点尽量多,这样即抵了行,又抵了列,为最优的。所以可以用行来消去列,也可以用列来消去行,我这里是列来消去行。首先将列的灯泡数排个序,从大到小枚举,同时每次行的数也要有序,可以直接排序或者用优先队列,然后一个一个消去... 阅读全文
摘要:
题意:给一串数字,第一个数是Num的话,要使后面的数字组成Num个数,而且为不降的,将这Num个数分配到9个素因子上作为指数,问能组成多少个不同的数解法:dfs一遍,看后面的数字能组成Num个不降数字的方法种数,及该种方法的不同数字的个数,然后这些方法加起来。具体见代码吧。代码:#include #... 阅读全文
摘要:
1.要求系数矩阵可逆2.A为增广矩阵,即A[i][n]为第i个方程右边的bi3.运行结束后A[i][n]即为第i个未知数的值typedef double Matrix[N][N];void gauss_elimination(Matrix A,int n){ int i,j,k,r; f... 阅读全文
摘要:
Stoer-Wagner算法基本思想:如果能求出图中某两个顶点之间的最小割,更新答案后合并这两个顶点继续求最小割,到最后就得到答案。算法步骤:-------------------------------------------------------------------------------... 阅读全文