史上最全的SGU题目分类

由于SGU上神题遍地,特列此表,便于训练时分类训练。


101 Domino 欧拉路
102 Coprime 枚举/数学方法
103 Traffic Lights 最短路
104 Little Shop of Flowers 动态规划
105 Div 3 找规律
106 The Equation 扩展欧几里德
107 987654321 Problem 找规律
108 Self-numbers II 枚举+筛法递推
109 Magic of David Copperfield II 构造
110 Dungeon 计算几何+模拟
111 Very Simple Problem 模拟笔算开方
112 a^b-b^a 高精度
113 Nearly Prime Numbers 判质数
114 Telecasting Station 找中位数
115 Calendar 模拟
116 Index of Super-prime 动态规划
117 Counting 快速幂
118 Digital Root 模拟
119 Magic Pairs 枚举
120 Archipelago 计算几何
121 Bridges Painting 构造
122 The Book 构造哈密顿回路
123 The Sum 递推
124 Broken line 计算几何
125 Shtirlits 搜索
126 Boxes 数学方法
127 Telephone directory 统计
128 Snake 并查集 + 树状数组
129 Inheritance 计算几何
130 Circle 卡特兰数
131 Hardwood floor 状态压缩动规
132 Another Chocolate Maniac 状态压缩动规
133 Border 贪心
134 Centroid 树型DP
135 Drawing Lines 找规律
136 Erasing Edges 数学方法
137 Funny Strings 构造
138 Games of Chess 构造
139 Help Needed! 数学方法
140 Integer Sequences 扩展欧几里德
141 Jumping Joe 扩展欧几里德
142 Keyword 枚举
143 Long Live the Queen 树型DP
144 Meeting 数学方法
145 Strange People 二分答案+搜索
146 The Runner 数学方法
147 Black-white King 枚举
148 B-Station 枚举+快排/二分/堆
149 Computer Network 树型DP
150 Mr. Beetle II 枚举
151 Construct a triangle 计算几何构造
152 Making round 构造
153 Playing With Matches 动态规划+找循环节
154 Factorial 二分 数学方法
155 Cartesian Tree 建笛卡尔树
156 Strange Graph 缩团+欧拉回路
157 Patience 搜索+开表
158 Commuter Train 枚举
159 Self-replicating Numbers 扩展队列+高精度
160 Magic Multiplying Machine 动态规划
161 Intuitionistic Logic 搜索*
162 Pyramids 数学方法
163 Wise King 模拟
164 Airlines 贪心
165 Basketball 构造
166 Editor 模拟
167 I-country 动态规划
168 Matrix 动态规划
169 Numbers 数学方法
170 Particles 贪心
171 Sarov zones 贪心
172 eXam 判断二分图
173 Coins 高斯消元
174 Wall 并查集+Hash
175 Encoding 搜索/动态规划
176 Flow construction 上下界网络流
177 Sqare 倒序染色
178 Chain 数学方法
179 Brackets light 找规律
180 Inversions 归并排序/高级数据结构
181 X-Sequence 找循环节
182 Open the Brackets 搜索
183 Painting the balls 动态规划优化
184 Patties 直接计算
185 Two shortest 网络流
186 The chain 贪心
187 Twist and whirl -- want to cheat 块状链表
188 Factory guard 数学方法
189 Perl-like Substr 模拟
190 Dominoes 二分图匹配
191 Exhibition 贪心
192 RGB 离散化 + 统计
193 Chinese Girls' Amusement 数学方法 + 高精度
194 Reactor Cooling 网络流
195 New Year Bonus Grant 贪心
196 Matrix Multiplication 数学方法
197 Nice Patterns Strike Back 动态规划+矩阵
198 Get Out! 计算几何
199 Beautiful People 最长非降子序列
200 Cracking RSA 高斯消元
201 Non Absorbing DFA 动态规划
202 The Towers of Hanoi Revisited 动态规划构造
203 Hyperhuffman 贪心
204 Little Jumper 二分+数学方法*
205 Quantization Problem 动态规划



以下分类收集于网络:

动态规划
sgu104
sgu168
sgu116(结合筛法的背包)
sgu132(状态压缩dp)


数学
sgu117(分解质因数)
sgu118(高精度)
sgu181(循环数列)
sgu154(递推)
sgu130(递推)
sgu107(找规律)
sgu108(筛法)
sgu144(数形结合)
sgu124(射线法)
sgu136(线性方程组求解)
sgu120(复数与向量旋转)
sgu139(15数码有解的充要条件)
sgu119(二元同余方程)
sgu109(染色和构造)
sgu355(找规律)
sgu126
sgu197(矩阵乘法)
sgu153(博弈数列与周期)

贪心构造
sgu165


搜索
sgu140(广搜)
sgu179(dfs树与字典序)
sgu125(优化)

分治
sgu175
sgu180(逆序对统计)
sgu133(排序)
sgu114(带权中位数)

图论
sgu172(二分图判定)
sgu143(树形动规)
sgu134(树形动规)
sgu190(匹配)
sgu122(哈密顿圈构造)
sgu149(树形动规)
sgu195(树形动规)
sgu185(可行流和建模)

数据结构
sgu177(矩形切割)
sgu174(并查集和哈希)
sgu128(树状数组和并查集)
sgu187(伸展树运用)
sgu143(哈希)

 


 

经历了若干打击之后。。。。。我发现自己的题量实在太小了。。。。加上我认识的神犇几乎都是怒切sgu的,开学之后就去sgu水水好了。。。

 

这一篇长期更新。。。。说不定很久以后就会成一个sgu分类了囧。。。。。当然前提是NOI的时候RP大爆发?。。。。

 

101: 欧拉路,USACO上有类似题目,从一个点开始搜然后删掉所选边出栈的时候扔到Ans里就可以了

102: 筛法求欧拉函数

105: 显然模3的结果是1,0,0,1,0,0。。。。。于是答案就是n/3*2+(n%3==2)

106: WA*inf。。。首先注意a,b可能为0的情况。。。然后为了方便起见把a,b搞成正数,然后exgcd算出一组解,把x调成x范围内最小的,这时候如果y小于y1无解,否则如果y大于y2,把y调到不大于y2的第一组解,如果此时x大于x2无解。然后算个调整的最小值就行了

107: 8位数中平方以后末尾是那个的只有8种,没了

108: 这种打表题还卡内存什么的最讨厌了。。。。。注意到数位和不大于63然后把被排除的比当前数大的记录一下,然后扫一下判断。

109: 构造题。。。注意到你指定了一个K观众只能站在某些对角线上,于是稍微构造一个n+1步每次删对角线的方法即可

111: 首先我不会模拟开方,于是写了个二分,然后TLE,然后压位,压四位似乎会爆int,压3位AC。。。。写的时候无限怨恨为什么多开点语言比如python。。。。。Java不会然后一google大家纷纷表示Java无压力有一种扔键盘的冲动。。。。。。

112: 裸高精。。。可我还不会写模板T_T

113: 直接判就行了。。。为什么那么多人说要搞素数测试。。。。

114: 显然可以安置的地点是一段区间,倘若向右移x,则增加的代价为 左边人数和减去右边人数和 , 只要按坐标排序线性扫下就行了

115: 编程入门模拟题

116: 筛出super_prime然后BFS。。。。貌似直接背包空间不够

117: 还是筛质数,然后指数乘上m后和k的指数比较

118: 显然那一堆操作就是求对9的余数(余数为0就是9),然后这个式子可以O(n)边模边算

120: 这题把我搞毛了。。。首先算出中心到顶点的距离,很容易,然后由于我想偷个懒于是计算法向量,但是一个问题是觉得判断向量的方向的情况实在有点多(此处WA*10略过)。。。。。。干脆直接暴力选一个方向算一遍看对不对,不对的话就一定是另一个方向了

122: 由于任意两个点度数之和不小于N,于是哈密顿路一定存在,可以得到一个O(n^2)的构造:找一条链,如果链能头尾相连则变成环,若不能则拆为连续的两端8字相连成环,然后从环外的点里找一个插进去,变成链,如此反复即可

123: 编程入门题

124:  判断一个点是否在多边形内。。。经典做法是往无限远处引一条射线,然后O(n)判断与多边形的交点个数,奇数在多边形内,偶数在多边形外。当然其中涉及一些比较讨厌的讨论,然后我就偷懒把坐标系旋转了一下然后再判水平,然后就过了。

125: 裸搜,加个可行性剪枝就行了

126: 大家纷纷表示这是数学题,但是我不会推导。。。直接模拟100W次没了。。。。。

127: 编程入门题

128: 易知连接方式唯一,只要判无解就可以了。连通性在每个点维护一个并查集就行,显然每条扫描线偶数个点,最后判相交,用一个线段数维护一下(类似面积并和周长并)

130: Catalan数

131: 状压DP,DFS出每层连通情况有一种非常漂亮的写法,需要仔细研究参数变化,详见周伟论文《状态压缩》

133: 一维排序一维set

134: BFS,重心至多2个

135: 编程入门题

136: 由中点公式得到一堆方程,n为奇数解法显然,n为偶数重点就是判无解,因为若有解则有无穷多组,随意给一组即可。只要一正一负累加系数判断是否为0

138: 我一直想找到一个可以判无解的构造。。。。最后放弃了。。。。有解的构造比较简单,就是贪心,次数大于1的时候安排成胜,否则输个局数次大的那个继续安排

139: 15数码判无解。。。其实若有解的话写个(ID)A*之类的应该还是可以很快出解的,但遇到无解就卡死了。。。。判断方法是看每个数码出现在哪里然后计算逆序对数+光标步数,可以发现排列之后若计算结果为偶数则任意情况之间互相可达,故必有解

140: 扩展欧几里得。我们知道方程ax+by=gcd(a,b)必有解,根据这个思路我们只要判断gcd(gcd(a[i]),p)是否是b的约数即可判断是否有解,然后的工作就是根据每次exgcd过程更新b就行了

141: 还是数论题。首先exgcd计算出一组解,然后为了保证有解要找到abs(x)+abs(y)最小的一组,由于x1,x2,p都很小直接用循环就行了。这个时候考虑奇偶性,如果x+y与k的奇偶性不同,若x1-x2为偶数则无解,否则调整一下。然后找到一组解,然后把剩余的步数等大的累加上去

142: 先说对数级做法。显然我们知道答案长度是不超过logN+1的(一个不可达的下界是2^(logN)+logN-1 = N + logN - 1>N),然后枚举答案ans,枚举长度为ans的串看是不是所有的串都出现过,这样的话最坏枚举O(logN)次,每次O(N),复杂度是O(NlogN)的。但是这题是有线性做法的。因为我们做的事情不过是一个多串匹配罢了,由于特殊性AC自动机会变成一棵满二叉树(不算fail指针)。然后直接匹配,枚举那个最短的没被匹配到的串。

143: 基础树形DP f[i] = a[i] + sum(max(f[j] , 0))

144: 这题不会请出门右转自学高中有关概率的内容

145: 计算简单路径中的K短路。关于K短路有很多十分愉悦的算法,比如A*(常用),扩展版的dijkstra/SPFA,偏离搜索等等。不过如果使用A*的话,那么不能保证简单路径。由于N,K都比较小考虑搜索,虽然N<=100,但是路径数量事实上最多是O(2^N)级别的,因此我们加一个二分,这样的话搜索时就可以利用一个预处理出的最短路进行剪枝了。

146: 如果不知道怎么做。。。。。T_T。。。。主要是一个取模的问题,直接用实数会囧,由于L只保留4位于是把它放大10000倍做。至于网上说的那个要加一个极小的数才能过其实是因为实数读入有时会把4读成3.999999999之类的,加个1e-6再乘就行了

147: 这题恶心死我了。。。。。首先我们假设所有人都要在x方向靠拢(否则旋转),然后黑白王所到达的地方是一个正方形边框,接着去模拟就行了。。。因为x是确定的,只要注意y方向是否可达

148: 从底向上做,显然如果破坏一层的话向下的最优值是可以做出来的,然后用一个set乱记录一下就行了

149: 求树中每一点离他最远的点的距离。求最远点的方法有DP和两次DFS两种,显然这里每次都DFS是不现实的。我们这么分析,首先以1个点为根,然后可以计算出以i为根的子树中从i开始的最长路和次长路。然后我们需要计算减去以i为根的所有子树后,距i的最大值。那么显然要么是从到达父节点的这条最长路下来,要么是在以兄弟节点为根的子树中的最长路里找一条再到达父节点再下来。两次DFS。

151: 学过解析几何应该都能直接算出坐标公式以及无解条件。。。。。一开始没注意到输出的三个点有顺序要求狂WA TEST2。。。。样例不厚道。。。。

152: 先取个下整看还缺多少个1,然后根据舍掉的小数部分按从大到小分配1

153: 居然被我乱猜出来了。。。由于m , p都较小,而n非常大,猜想有循环节,然后就行了(必胜态必输态可以递推也可以记忆化)

154: 二分,这题就是求因子5的个数,利用二分加速。判无解的时候看二分出来的答案和要求的那个是不是一样的就行了

155: 构造笛卡尔树。这是有O(n)的方法(不考虑排序)的但是我不会。。。二叉排序树的中序遍历是递增的,因此按K排序,然后我们要高效回答最小值,可以用ST(反正都排序了再加个O(nlogn)的预处理也没什么) , 这样的话构造的过程就是O(n)了。

156: 显然关键点是那些度数为2的点,剩下的每一小块可以用并查集合并缩点,这样就变成了求欧拉回路了,不过细节有点多

157: 一看就是搜索打表题。。。。。。。虽然这个方法十分暴力但似乎找不到更好的了,集训队作业中大家纷纷打表。。。。

159: 这题需要有一些灵感(或者叫观察力),假设一个答案是t*b^(n-1)+x , 那么它的平方就是t*t*b^(2n-2) + 2*t*x*b^(n-1)+x*x ,这就表明了它的后n-1位实际上是由一个n-1位的数x的平方确定的,因此x就是n-1时的一个合法解,因此可以从低到高搜索

160: 那个65536看的我泪流满面啊!!!!! O(mn)的判定DP(或者叫搜索?),记录一下由什么状态转移

162: 搞一个空间直角坐标系推坐标

163: 编程入门题

165: 只要注意到减2后身高在[-0.05,0.05],而此题要求为任意一个子区间和在[-0,1,0.1]内,恰好就是0.05-(-0.05) 于是如果当前非负就排最矮的,当前为负就排最高的

187: 裸的splay。。。。。块链也行。。。。纯练手题

 
 
101 Domino   
    无向图的欧拉回路
102 Coprimes   
    欧拉函数
103 Traffic Lights
    最短路问题,可以用Dijkstra解,对于每个结点都是尽可能早的到达,然后等一段时间再出发去下一个结点。
104 Little shop of flowers
    动态规划
105 Div 3
    数学题,这个序列模3的结果为1,0,0,1,0,0,1,0,0,……
106 The equation
    数学题
    首先单独处理a, b可能为0的情况。
    令d = (a,b),如果c%d != 0,则无解。
    用Extend_Euclid求得初始解:a*x + b*y + c = 0
    则满足x1 <= x + t*b/d <= x2
          y1 <= y + t*a/d <= y2
    的t的个数即为结果 
107 987654321 problem
   数学题,直接输出结果。
   可以证明n <= 8时结果为0, n为9时结果为8,n为10时结果为72, 以后n每增加1,结果×10.
108 Self-numbers 2
   数学题
   10000000的数组会超内存,可以用优先队列的方式,求出所有Self-numbers,还必须减少d(n)的计算时间。如果保存d(0) – d(10000)的值,则d(n)可以由2次运算得出。
109 Magic of David Copperfield II
   构造题
110 Dungeon
   计算几何模拟
   给定法线方向N,入射光线方向L,则反射光线方向为2N((-L)·N)- (-L)。(其中·为点乘)
111 Very simple problem
   手算开方(试除法)。
112 ab-ba
   高精度模拟
113 Nearly prime numbers
   简单枚举
114 Telecasting station
   可以证明中位数即最优解。
115 Calendar
   简单题
116 Index of super-prime
   动态规划
   首先生成所有的Super-prime number,然后DP
117 Counting
   数学题,因式分解
118 Digital Root
   数学题
   DR(ab) = DR(DR(a) * DR(b)); DR(a+b) = DR(DR(a) + DR(b)); O(N)即可求出结果
119 Magic Pairs
   数学题
   令d = GCD(a, b, n); a /= d; b /= d; n /= d; 则((ka%n)*d, (kb%n)*d) (0<=k 120 Archipelago
   计算几何
   先求出正N边形外接圆的圆心坐标,然后利用线段的旋转求出所有顶点坐标。假设给出的两点坐标为p1、p2,圆心坐标为p0,则p0可由三角形 p0,p1,p2求出。
121 Bridges painting
   欧拉路的应用
   首先找到奇顶点对之间的欧拉路,顺次染成0,1,..。当没有奇顶点,对所在顶点找欧拉回路,顺次染成0,1,..。最后判断是否可行。
122 The book
   Hamilton回路
   C/C++中,用scanf输入会超时
123 The sum
   简单题,直接求和
124 Broken line
   计算几何经典问题,判断点是否在多边形内
125 Shtirlits
   搜索题
   注意搜索顺序。只讨论N为3的情况,首先枚举(1,2), (2,1), (2, 3), (3,1), (2,2),然后对于(1,1), (1,3), (3,1), (3,3)只需枚举可能取值中的两个再判断即可。O(2^4*10^5)
126 Boxes
   数学题
   分别用所占比值来表示两个箱子中球的个数(a1/b1, a2/b2)(其中a1/b1为既约分数)。从(0, 1)倒推可以发现,所有结点都满足b1, b2是2的倍数。而次数既为log2(max(b1,b2))。
127 Telephone directory
   排序+简单统计
128 Snake
   构造题
   一道不错的题目。 很容易想到其实构造方法是唯一的,那就是在同一行或同一列的结点1,2,3,4...m-1,m连成1-2, 3-4,..., (m-1)- m的形式。
    剩下的问题就是判是否连通和是否有自交。判连通可以用并查集。主要是判自交,这个可以用线段树。先按x轴离散化,然后扫描,把平行x轴的边当点插入线段树,然后每插入一条垂直x轴的边就就看看在这个边的范围内是否已插入过点,如果插入过,则自交了,若扫描完所有的点都没自交,则有解。
129 Inheritance
   计算几何基础题
   求一条线段在凸多边形内的长度。注意此线段与多边形一边在同一直线上的情况。情况比较多,要细心。
130 Circle
   Catalan数
   要使分成的块最少,则没有两根弦相交。则此即为一Catalan数。
131 Hardwood floor
   集合DP
   状态的转换是难点。如果全部为1*2的砖,则有O(N*M*2^M)算法,但此题无法套用。
132 Another Chocolate Maniac
   集合DP
133 Border
   简单题,排序+统计
134 Centroid
   简单树形DP
135 Drawing Lines
   简单数学题
136 Erasing Edges
   数学题,递推+解一元一次方程
137 Funny Strings
   构造
138 Games of Chess
   贪心构造
139 Help Needed!
   数学题
   OIBH结论:先算出光标偏离原位置的步数a,再将偏离原位置的数字与其原位置中的数字交换(光标也看作为一个数字),直到所有数字回到原位,记下交换次数b。如果a+b是偶数就有解,反之无解。
140 Integer Sequences
   多元一次不定方程
   注意Ai模P、Xi模P可以简化计算过程。
141 Jumping Joe
   有限制的二元一次不定方程
   令y1 = P1 – N1, y2 = P2 – N2, 可以用扩展欧几里德算法求出y1, y2的一组初始解,然后分别对y1, y2在0附近枚举,看是否有解,如果没有则无解。
142 Keyword
   统计题
   显然结果的长度不会超过logN,从小到大枚举长度,再判断即可(用二进制判重)。
143 Long Live the Queen
   树形DP
144 Meeting
   概率题
   令t = (y-x)*60,则结果为1 – (t-z)*(t-z)/t/t。
145 Strange People
   无向图中Source到Target之间的第K简单路。
   二分枚举最大长度,DFS判断是否有K条简单路。可以先算出所有点到Target之间的最短距离,用于剪枝。
146 The Runner
   数学题
   为避免浮点误差,可以扩大10000倍计算。
147 Black-white king
   枚举+判断
   从小到大枚举步数,再判断对于给定的步数,black-white king能否和white king或black king相遇。而对于一个步数,white king或black king可能到的方格是一条线段,black-white king可能到的方格是一个正方形,题目则为求此线段和正方形是否相交。
148 B-Station
   枚举+贪心
   令DP[i]表示第一个炸掉的层为第i层时的结果,则最优解为DP[i](1<=i<=n)的最小值。而DP[i]可由DP[i-1]得到。从1....N计算DP[i]的值,由DP[i]到DP[i+1]只会有有限层需要炸掉(可以通过排序得到),而在后面的计算中它们的状态不会变,即都需要炸掉。
149 Computer Network
   树形DP
   两次DFS即可。
 
 

100 A+B
Author: Amber
Method: Add Directly

101 Domino
Author: Amber
Method: Euler Path
Complexity: O(N^2)

102 Coprimes
Author: Amber
Method: Calcuate Euler Function

104 Little Shop of Flowers
Author: Amber
Method: DP
Complexity: O(N^2)

105 Div 3
Author: Amber
Method: Maths
Detail:
Consider the head of the sequence.
Number: 1 12 123 1234 12345 123456 1234567 12345678 …
Mod 3: 1 0 0 1 0 0 1 0 …
The loop is (1 0 0).

106 The Equation
Author: Amber
Method: Math
Detail:
简单,但麻烦的题,考虑问题要周全。

1.先把A或B为0的情况排除。
2.用extended_gcd找到一组(x0,y0), s.t. A*x0+B*y0=D, D=GCD(A,B)
3.方程有解冲要于D|C
4.A=A/D,B=B/D,C=C/D
5.x0=x0*(-C),y0=y0*(-C)
6.把 x=x0+t*B, y=y0-t*A 带入 x1<=x<=x2, y1<=y<=y2
x1-x0<=t*B<=x2-x0
y0-y2<=t*A<=y0-y1
把A,B除过去时要注意是否变号
7.得到t的范围,输出
Notice:
1.做A,B不等式除法时要注意是否变号
2.不要吝惜Int64

107 987654321 problem
Author: Amber
Method: Maths
Detail:
When N = 9, there exists 8 solutions by maths method or search program.
When N = 10, the first digit is in range (1 – 9). So 8 * 9 = 72.
When N > 10, insert a digit in range (0 – 9) into the second digit of the solution with (N – 1) digits. So Ans = 72 * 10^(N – 10)

108 Self-numbers II
Author: Amber
Method: Filter
Version: 1 (Filter)
Detail:
Do filtering as filtering primes: N generates D(N) and filters D(N) from small to large.
1)Cuz D(N)-N<=9*lgN, use Loop queue O(9*lgMaxN) in memory.
2)Pre-calculate the digit sums from 0000 to 9999 to Sum.
So the time of D(N) is reduced from O(lgN) (digit by digit)
to O(2) (4 digits by 4 digits, and N is O(10^7))
3)sort the query
Complexity: O(Sqrt(MaxN)*lgSqrt(MaxN)) for pre-processing the sum
O(MlogM) for sorting the querys
O(N) for filtering
Real time: 1134 ms
Notice:
1)It's Read not Readln.
2)There may be two same querys!!

111 Very simple problem
Author: Amber
Method: Sqrt with HP
Detail:
Y=Sqrt(X), 设 |X| = N,则 |Y| <= N / 2
从高位到低位,枚举Y的每位数字Yi,直到Y^2恰好<=X (即这位取Yi + 1时,Y^2 > X)
State:
253102 19.12.04 13:14 hupo001 111 .PAS Accepted 197 ms 89 kb

112 a^b – b^a
Author: Amber
Method: Simulate by HP

113 Nearly prime numbers
Author: Amber
Method: Find prime divisors
Notice:
P = P1*P2 (P1 may be equal to P2)

114 Telecasting station
Author: Amber
Method: Enumerate
Detail:
It's easy to prove that the station must be in some city.
Notice:
WA too many times cuz of position may not a integer.

115 Calendar
Author: Amber
Method: Simulate

117 Counting
Author: Amber
Method: Prime Decompose
Detail:
K is decomposed to the formal of Product[Pi^Ai].
For each T, it will be decomposed to the same formal of Product[Pi^Ti].
if Ti * M >= Ai then count.

118 Digital root
Author: Amber
Method: Maths
Detail:
1.Digital Root is equivalent to "Specially Modulo 9" (replace 0 with 9).
2.A1*A2*…*AN + A1*A2*…*AN-1 + … + A1*A2 + A1
=A1*(A2*…*AN + A2*…*AN-1 + … + A2 + 1)
=A1*(A2*(A3…*AN + A3*…*AN-1 + … + A3 + 1) + 1)
=…
=A1*(A2*(A3(…*(AN + 1)… + 1) + 1) + 1)
So we can use O(N) to solve it.
Complexity: O(N)

119 Magic pairs
Author: Amber
Method: Math
Detail:
预处理:
令T=(A,B,N), A=A/T,B=B/T,N=N/T,
现在(A,B,N)=1,它的解原来原来的解可以一一对应: 解(A,B)->解(A*T, B*T)

以下都是在mod N意义下的,k为正整数
证明: 解(kA,kB) (0<=k kA 能取 P=[A,N]/A 个值,同样 kB 能取 Q=/B 个值, 这样 解(kA,kB) 能取[P,Q]个值。
下证 若(A,B,N)=1 则[P,Q]=N
由AB=(A,B)[A,B] 得P=N/(A,N),Q=N/(B,N)
又得 (A,N)*P=(B,N)*Q=N
又由(A,B,N)=((A,N),(B,N))=1,得[P,Q]=N

123 The sum
Author: Amber
Method: Simulate

124 Broken line
Author: Amber
Method: Geometry Count
Detail:
It's a classical problem in geometry:
Query whether point R(x,y) is inside a simple polygon.

for each segment P(x1,y1)-Q(x2,y2) here x1<=x2
if x1<=x if det(PQ,PR)>0 then
count++
if odd(count) then "inside" else "outside"
Do something special for "border" case.

Complexity: O(N)

125 Shtirlits
Author: Amber
Method: Brute-force
Detail:
Range is too small, Brute-force!!!
My program is slow.
If providing search order, it can be more optimal.

126 Boxes
Author: Amber
Method: Maths + Simluate
Detail:
S = A + B

127 Telephone directory
Author: Amber
Method: Simulate

130 Circle
Author: Amber
Method: DP
Detail:
A diagonal can divide the graph into two parts.
These parts are still the same as the original problem.
Complexity: O(N^2)

131 Hardwood floor
Author: Amber
Method: Set-DP
Detail:
State (N,K) (0<=K<2^M) denotes that the current is in n-th lines and the plan of (n-1)-th lines is K.
Transfer: K->K' by DFS
There are 7 transfers in total.
1: 2: 3: 4: 5: 6: 7: do noting
** ** * * *
* * ** ** ** *
in my program,
"Pow and Prev" gets the depth-th value of the last line.
"Pow shl 1 and Prev" gets the (depth-1)-th value of the last line.
Complexity: O(N*2^M*R)
R is average transfer times.
Notice:
1)把转移事先都处理好
2)使用queue向后递推的方式,可以减少DP初期的冗余(初状态只有一个!)
3)由于有queue,DP数组球没有必要每次都filchar.用了一个状态后,清0即可.

133 Border
Author: Amber
Method: Sort and Count
Complexity:
O(nlogn) for sort
O(n) for scan

135 Drawing Lines
Author: Amber
Method: Simple Maths

137 Funny Strings
Author: Amber
Method: Construct (Maths)
Detail:
记N个和为M数组成的Funny string为F(N, M)
if N <= M then
F(N, M mod N) + M div N
if N > M then
问题就是由M个1与N-M个0组成的Funny String。
它的第i个0后有F(N – M, M)中的第i个数个1。
i.e.
对于Funny string 0101101011011,统计每个0后1的个数得:
1,2,1,2,2,依然是个Funny string.

138 Games of Chess
Author: Amber
Method: Construct
Detail:
把数据排序,由于保证有解,最多场的那个人不会超过总和的一半(不会自己和自己比).
所以按以下方法填掉第一列(第一列为win,第二列lose)
即按场次从大到小依次填入第一列,若只剩一场就填到第二列去.
win lose
x
x
x
y x
y
z y
z

最后把剩下的填到第二列没填的地方.
Complexity: O(N)

140 Integer Sequences
Author: Amber
Method: Maths (Number Theory)
Complexity: O(N)
Detail:
解n元线性模方程

1.先做整理
Sum[Ai*Xi | 1<=i<=N] = B (mod P)
=> Sum[Ai*Xi | 1<=i<=N] + P*X0 = B
将P用A0代换,即令A0=P
=> Sum[Ai*Xi | 0<=i<=N] = B

2.逆推,分步迭代
先把最后一项整理出来
=> Sum[Ai*Xi | 0<=i<=N-1] + AN*XN = B

将前面的项用他们系数的GCD代换 Sum[Ai*Xi | 0<=i<=N-1] = GCD[Ai | 0<=i<=N-1]
=> GCD[Ai | 0<=i<=N-1] * T + AN*XN = B
通过Extended_GCD(GCD[Ai | 0<=i<=N-1], AN, T, XN) = GCD[Ai | 0<=i<=N], 解得(T, XN)。

而Sum[Ai*Xi | 0<=i<=N-1] = GCD[Ai | 0<=i<=N-1] 又是一个N-1规模的子问题,
最后只要将这个子问题的解 * T 就可以了。

3.综上易知有解充要条件是:B被GCD[Ai | 0<=i<=N]整除

符号:
这里 GCD[A1, A2, ..., AN] = GCD[A1, GCD[A2, GCD[..., GCD[AN-1, AN]]]]
Extended_GCD(A, B, X, Y)的结果是(X, Y)使得AX+BY=GCD(A,B).

142 Keyword
Author: Amber
Method: Enumerate + Encode
Detail:
1.Enumerate the length of answer Len increasing.
2.Encode the substrings with length Len in string, label it in table.
3.Enumerate unlabeled substrings with length Len, if not exists, goto 1.
Complexity: O(N)*O(2^MaxCodeLen)

145 Strange People
Author: Amber
Method: Binary Search + DFS
Detail: K短路问题
利用二分答案转为判定性问题,这样由于K比较小,每次只要搜K条就可以了。复杂度为O(NK)的。
还可以利用最短路标号来剪枝。
Complexity: O(NKLogW)

148 B-Station
Author: Amber
Method: Enumerate+Optimize
Detail:
确定了减压的第一层,就可以模拟出来一个计划了.O(n)
枚举所有的减压的第一层,计算出计划的价格,取最优。
单调性优化:从下往上处理, 注意到所有层都只可能从付钱到不付钱。
Sum(i)=SUM(Water(i)|i=n to i)
j为当前枚举层, 对于i>j,若有 Limit(i)  这可以通过排序Sum(i+1)+Limit(i)实现。
Notice:
It will get MLE at 4 by QuickSort. (1349 kb)
It got AC by Heapsort. (449kb)

150 Mr. Beetle II
Author: Amber
Method: Enumerate + Maths
Detail:
Some useful testcase for me
Input: 8 1 1 9 4
Output: 6 3

151 Construct a triangle
Author: Amber
Method: Simple Geometry
Detail:
The median formula is 2a^2+2b^2-c^2=4m^2.
AC=BD, So 2*AM=AD<=AB+BD=AB+AC, 2*AM=AD=>AB-BD=AB-AC.
A
/|\
/ | \
/ | \
B—M—C
\ |
\ |
\|
D
Notice:
The area of the triangle can be equal to zero!

153 Playing with matches
Author: Amber
Method: DP and Find Loop
Detail:
1.Simple DP
F(n)=true if exists one di s.t. F(n-di) is false
false else
2.Find Loop
Let max be the maximum of the taken number.
Consider case n>max.
Let prev_state(n) store the binary code of F(n-max) to F(n-1) with length max.
If prev_state(i)=prev_state(j) (i Complexity: O(Min(2^M,N))

154 Factorial
Author: Amber
Method: Math
Detail:
Problem is
given Q and to find N s.t. …+[N/5^4]+[N/5^3]+[N/5^2]+[N/5]=Q -(*)
Let N=5X, write X in 5-base:
X=…+ 5^3*x3 + 5^2*x2 + 5*x1 + x0, xi=0..4
X into (*) => Q=… + (5^3+5^2+5+1)*x3 + (5^2+5+1)*x2 + (5+1)*x1 + x0
Let sum(i)=sum(pow(j)|j<=i)
Algorithm is known:
for each i from high to low digit
1.xi=Q div sum(i)
2.if xi>4 then no answer
3.Q=Q mod sum(i)
Notice
When Q=0,output 1 (not 0).

155 Cartesian Tree
Author: Amber
Method: Construct Cartesian Tree in Linear Time
Complexity:
Sort: O(nlogn) + Construct: O(n)
Detail:
Cartesian Tree(CT)
这里称Auxiliary为Proirity(优先级, Pro)
先将节点按key排序,得到CT的中序遍历。
下面是CT的线性时间构造:
设Ci是T[1...i]的笛卡尔树。
1.第i+1个结点一定属于Ci+1最右侧的路径。
(若不考虑优先级,第i+1个结点为最右侧的最右端点。)
2.自下而上检查最右路径,找到第一个优先级低于第i+1个结点的结点p.
p的右子树作为第i+1个结点的左子树.
使第i+1个结点成为p的右儿子.

可以证明每个节点最多被检查1次,因为只要在最右路径上的点被检查不是新节点的父亲,
就要转移到新节点的左子树中,不会再被检查到。
所以本算法是线性的。
Real Time: 246 ms

156 Strange Graph
Author: Amber
Method: Euler Path + Contraction
Detail:
先理解这个图: 它是由若干个子完全图组成, 子完全图中的每个点有且只有一条链与其他的某个点(本子图或其他子图)相连.
求其hamilton圈,可以先把每个子完全图压缩成一个点(称为团),在这样压缩后的新图上做euler圈,最后再把团展开(入团点->出团点),就是hamliton圈了.
因为只有团才能为奇点,所以当只有0或1个奇团时问题才有解.

我程序中Edge为前向星的原边,GrpEdge为团指出去的边(前向星).这样比较方便处理.
Complexity: O(M)

158 Commuter Train
Author: Amber
Method: Enumerate
Detail:
The maximum may occur in the case that one certain person stands at mid-point of two adjacent doors.
Complexity: O(NM(N+M))

159 Self-Replicating Numbers
Author: Amber
Method: HP
Detail:
性质P: n位数x的平方后n位仍为x.称有性质P的数为"P数".
一个显然的推论: n位P数必要条件是它的后n-1位是P数.
于是: 枚举第n位,把的n-1位P数转移到n位的P数.
这样维护一个扩展队列就可以了
剩下是高精度的问题了

162 Pyramids
Author: Amber
Method: Geometry
Detail: See readme.gsp

163 Wise King
Author: Amber
Method: Greedy

164 Airlines
Author: Amber
Method: Math + Floyd
Detail:
A hard-think proposition:
Divide M into two parts A,B such that |A|,|B|<=(M+1) div 2.
A or B must satisfy the condition.
Its proof is in Zhou Yuan's solution.

Complexity: O(N^3)

165 Basketball
Author: Amber
Method: Construct(Greedy)
Detail:
If the current summation is negative, we add a positive number if we can, otherwise add a negative.
After adding a number, if the summation exceeded the limit, there must exist no solution.
The graphics of the current summation is a asway sequence between -Limit to Limit.

167 I-country
Author: Amber
Method: Complex-DP
Detail:
State (Line, Left, Right, GoLeft, GoRight, Remain)
"Line" denotes the current line of process.
"Left" and "Right" denotes the segment from "Left" bound to "Right" bound of the current line which are chosen.
"GoLeft" denotes whether the Left bound of the previous lines is lefter than the current's.
"GoRight" denotes whether the Right bound of the previous lines is righter than the current's.
"Remain" denotes how many cells remain to be chosen.

169 Numbers
Author: Amber
Method: Math
Detail:
Let n=abc…x
s.t. a,b,c…<>0
last digit x s.t. 1<=x<=8, otherwise p(n)=0 or p(n+1)=0
Let r=p(n)/x
Let k,k' (k<=k') s.t. n=krx -(1),
n+1=k'r(x+1) -(2)
Let k'=k+d
(1)(2) => krx+1=krx+kr+dr(x+1) => kr+dr(x+1)=1 -(3)
Prove k=k':
Let d>0
Cuz x+1>1, dr(x+1)+kr>1.Conflict, so k=k', d=0
d=0 into (3) => kr=1 => k=1, r=1
So n=111111…x (k-1 ones)

Let condition P(x) is that x | 111111…x.
If P(x) and P(x+1), then 111111…x is perfect.

P(1),P(2),P(5) are always true.
P(3)=3|111111…3 = 3|1*(k-1)+3 = 3|k-1
P(6)=2|111111…6 && 3|111111…+6 = 3|k-1
P(9)=9|111111…9 = 9|1000..00+…+1000+100+10+9 = 9|k-1
P(4),P(8) are true iff k=1.

P(7)=7|111111…7
num: 1111110 111110 11110 1110 110 10
mod 7: 0 6 1 4 5 3
Loop length is 6
so P(7)=6|k-1

170 Particles
Author: Amber
Method: Simulate
Detail: Count the distance between the '-' in two strings.

171 Sarov zones
Author: Amber
Method: Greedy
Detail:
1.Sort zones by level to Z
2.Sort students by weight to S
3.For each student S whose weight is from heavy to light,
If a non-full zone Z[j] whose level is the highest lower than S can be found, then S->Z[j].
else S isn't processed at this moment.
4.For each unassigned S, find any non-full zone Z[j], S->Z[j].
Complexity:
O(M^2) for sort zones
+O(NlogN) for sort students
+O(NM) for greedy
+O(N) for output

174 Walls
Author: Amber
Method: Disjoint-Set
Detail:
有序地给出不相交(可相接)的线段,求线段i,使得放入1,2,..,i后产生第一个闭区域。

由于只有相接情况,可以把端点作为元素,线段为合并条件。
若线段两端的点在合并前已经在同一个集合内,则闭区域出现,退出。
则可利用并查集实现。
下面就剩下查找重合点的问题,有如下几种方法:
1)可以用有序化点集,二分查找。 (预处理)
2)Hash (动态处理)
3)动态查找的数据结构 (Treap等) (动态处理)
1)AC了,2)AC了,3)没做 :P
Version: 1 (Binary search)
Complexiy: O(MlogM) 这里把并查集的复杂度视为常数

176 Flow construction
Author: Amber
Method: Preflow + Binary Search
Detail:
The minimum flow with lower bounds.
在有下界网络流模型中建立的无源汇网络,有一个重要的性质。边(N, 1)的流值,等于当前网络中的总流值。
所以枚举边(N, 1)的上限,找到一个上限恰好使得所有必要弧都满流。这个上限就是最小流值。
由于满足单调性,所以可以二分枚举上限。
Notice:
The edge (N, 1) may appear in input.
So the flow of (N, 1) doesn't denote the flow of the network.
It should be divided into two part to think, which are a part of flow for input edge (N, 1)
and the other part of flow for denoting the flow of the network.

177 Square
Author: Amber
Method: Count by Next Pointer
Detail:
A classical problem.
Count by a next pointer array.
Complexity: O(N*(N+M))

178 Chain
Author: Amber
Method: Maths
Detail:

179 Brackets light
Author: Amber
Method: Construct
Clariry:
寻找最右边的可以变为")"的"("(记为x)(也就是x的之前有"("可以与改变后的x匹配),把它改成")"后
,再将它后面的括号排成"((((…))))"+"))..))"的形式。
"+"前的"((((…))))"保证了字典序最小
"+"后的"))..))"是为了与x前的"((..(("匹配的。

181 X-Sequence
Author: Amber
Method: Simulate and Find Loop
Detail: Find the loop of the sequence.
Complexity: O(M^2)

183 Painting the balls
Author: Amber
Method: DP with Optimization
Detail:
State (i,j) (1<=i<=n-1,1<=j<=m-1,i+j<=n) denotes last two black balls i, i+j //O(NM) for states
Transfer (i,j)=min (i-k,k) (i-k+m>=i+j, i-k>=1, k>=1) //O(M) for transfer
If N-M+1<=i, (i,j) is a finish state.
Optimization: //O(1) for transfer
Enumerate j from m-1 to 1, the range of k gets larger cuz of 1<=k<=m-j.
Set a var CurMin for each i which records min (i-k,k) for the larger and larger range of k.
Complexity: O(NM)
Memory: O(M^2)
Notice:
PreMod(i) is i mod M.
It's for scroll array.

185 Two shortest
Author: Amber
Method: Dijsktra + Ford Fulkerson
Detail:
1.It's an undirect graph G.
Dijkstra it!
If an edge (u,v) in G s.t. d(v) = d(u) + w(u,v) then it will remain in new graph G'.
G' is a graph that is shortest-path directed from G.
Namely, Now we get a directed graph G'. Any path from 1 to N in G' is a shortest path.
2.Find two augment paths by flow, and augment them.

186 The chain
Author: Amber
Method: Greedy
Detail:
Each time choose the minimal item, unchain the item to links.
Check if it's enough to chain remain chains.

187 Twist and whirl — want to cheat
Author: Amber
Method: Simulate discretely
Detail:
不断的拆分线段, 每次分裂出2个线段, 模拟即可.
Complexity: O(M^2)

188 Factory guard
Author: Amber
Method: Simulate
Detail:
1.Enumerate any i,j
2.Find first meeting distance Delta of i,j, and then they will complete a circle together for each meeting
So solve (Delta+Len*k)/(|Vi|+|Vj|)<=T, k is integer, k+1 is the number of i,j meeting.
Complexity: O(N^2)

189 Perl-like Substr
Author: Amber
Method: Simulate + String Processing
Detail: 关键就是把复杂Substr函数参数,转为平常的Copy函数的参数。

191 Exhibition
Author: Amber
Method: Simulate
Detail:
The statement is so hard to understand.
Abstract it as following:
Consider a sequence which consists of 4 kinds of chars – abAB.
There are two principles to change the sequence:
1.replace a with B or Aba
2.replace b with A or Bab
Does there exist a way to change a single element a or b at the beginning to a given sequence which consists of AB?

Consider the leftest a or b called P of inital state and the leftest A or B called Q of terminal state.
If Up(P)=Q, only use A->Aba or B->Bab
else only use A->B or B->A.
Simulate in that way by stack.
Complexity: O(N)

193 Chinese Girls' Amusement
Author: Amber
Method: Math
Detail:
Discuss:
Odd(N)
Ans=N div 2 , cuz GCD(Ans,Ans*2+1)=1
Even(N)
Odd(N div 2)
Ans=N div 2-1, cuz GCD(Ans,2(Ans+1))=1
Even(N div 2)
Ans=N div 2-2, cuz GCD(Ans,2(Ans+2))=1

194 Reactor Cooling
Author: Amber
Method: Preflow push
Detail: The feasible flow with lower bounds.
1.先将原图连接上边(N, 1),容量无限,组成无源汇网络。
2.建立一个超级源S,超级汇T。连接上边(T,S),容量无限,再次组成无源汇网络。
对于边(x, y), 容量下界l,容量上界h,应分离出必要弧(即一定要满足的下界)。
边(x, y),等价的变换为三条边(x, T) -> (T, S) -> (S, y)。他们容量均为l。
而分离出必要弧的(x, y)的容量为h-l。
3.去掉(T,S)。从S到T做最大流,若S或T的邻边都满流,则所有必要弧被满足,问题有解,否则无解。
4.还原所有必要弧,则问题还原成1中的无源汇网络。网络中的流值必定是一个可行解。
因为无源汇网络满足流量平衡,且所有必要弧都满流。
Notice:
Why???
第1步中连接上边(N, 1),不能AC。没有连接上边(N, 1),就AC了。
但不能解释下面这个数据。
3 2
1 2 1 3
2 3 2 4
连接上边,则有解;否则无解。

195 New Year Bonus Grant
Author: Amber
Method: Tree-DP
Complexity: O(N)
Detail: 每个节点分发送礼物(可以不发送)(记为0),还是收到礼物(记为1)讨论。
F(x, 1) = 1 + Sum[F(x.child, 0)]
F(x, 0) = Sum[F(x.child, 0)] + Max[F(x.child, 1) - F(x.child, 0)]

197 Nice Patterns Strike Back
Author: Amber
Method: Set-DP
Clarity:

Complexity:

198 Get Out!
Author: Amber
Method: Find circle and judge point inside polygon
Detail:
先将物体本身的大小r,加到障碍物的大小中去: R' = R + r。这样就可以把物体看成是一个点,问这个点是否被圆障碍物围住。
若两个圆有没有相交,则可以认为,人可以从他们之间穿过去;相交则不行。
所以若两个圆相交,则在圆心之间连一条线段,表示这条线段不能通过。问题转化为是否存在一个圈,将物体点围住。
主算法:枚举所有圈,再判断点是否在圈对应的多边形内(上)。
有2个问题:
1.枚举所有圈是NP的。(如完全图的圈数是N!)
我们利用DFS Tree得到的圈是O(M)级别的,少了的那些圈是什么?
考虑DFS Tree:(u是v的祖先, v是w的祖先)

|—|
Root …-u-a-v-b-w
|_______|

存在两条后向边, (w, v), (w, u)。
我们可以找到两个圈,(v, b, w, v),(u, a, v, b, w, u)。
少了一个圈:(u, a, v, w, u),发现是上面两个圈的一个合成。
如图:DFS Tree只能找到A, B两个圈,A, B的合成(外围的轮廓)是找不到的。
但本题要求判断点是否在圈内,若点即不在A, 也不在B,必然就不在A, B的合成内。
所以枚举所有圈是没有必要的,只要枚举DFS Tree得到的圈。
/—\ /—\
| A | B |
\—/ \—/

2.如何快速判断点是否在多边形内(上)。
判断Q是否在多边形{Pi}内,这里使用一种优美的算法:
对于满足Min(Pi.x, P(i+1).x) <= Q.x < Max(Pi.x, P(i+1).x)的边(Pi, P(i + 1))。
若Det(Pi, P(i+1), Q) > 0,则Count++
若Det(Pi, P(i+1), Q) < 0,则Count--
若|Count| = 2,则Q在多边形内
若|Count| = 0,则Q在多边形外
即以Q做x轴垂线,考察它与多边形的所有交点所在的边,相临交点所对应的边的方向一定不同。
利用边方向交错的性质,就可以找到Q是否在多边形内了。
由于是统计型的判断,所以在DFS Tree中可以用部分和的方法,存下当前点到根的路径上的统计信息。
找到圈就可以O(1)判断了。

3.圈对应的多边形不是简单多边形
上面的判断方法,在不是简单多边形的情况下某些中心区域可能漏判。但是由于图是依据圆相交的情况建立。虽然不是平面图。
但是这些中心必然也是一个另外可以拓展到的一个圈的内部。
Complexity: O(N^2)

200 Cracking RSA
Author: Amber
Method: Gauss Elimination
Detail:
若干个数的积是平方,要求每种质因数的个数为偶数。
列出线形模方程,解出自由变量的数目x,答案为2^x-1。
Complexity: O(T*N^2)
Notice: None

201 Non Absorbing DFA
Author: Amber
Method: DP
Detail:
由于Xi=1的转移相当于多走几次字符j,可以转化为新的Phi。
若出现圈则令圈上的节点为死结点(自动机不能走到的)。
状态(l, i),表示到第l步第i个状态的合法字符串数。这样就可以DP了。
Notice:
Test 1, WA 10 times.
数据没有像题目中所说的那样一行一行读入。可能所有数据在同一行上。
Test 11, WA 3 times.
计算新转移的时候没有认真设计算法。

203 Hyperhuffman
Author: Amber
Method: Simulate by Queue
Detail:
Simulate according to the definition of Huffman tree which is to choose two smallest nodes and to merge them each time.
O(nlogn) by Heap
But the data are in order, so we can maintain two ordered queues to solve it in O(N).
A huffman property that the values of mergings are increasing one by one time.
One queue is the data queue.
The other queue is the new-node queue.
Each time choose two smallest node from the heads of two queues, merge them and push it to the tail of the second queue.
Complexity: O(N)

205 Quantization Problem
Author: Amber
Method: DP
Detail:
题目比较令人费解:给出一列数Si和一个m*s的矩阵A(m≤s且m,s都是2的整数次方)。求一列数Ki,使K0=0,且 Sum[|A[K(i-1) mod M, Ki], Si|]最小。
简单DP即可。
Complexity: O(NMS)

207 Robbers
Author: Amber
Method: Greedy
Detail:
ki = [xi/y*m] or [xi/y*m]+1 only.

Let ki=[xi/y*m] firstly, so it may remaining some coins.
diff=|ki/m-xi/y|
Sort robber by diff, and distribute remaining coins to robbers (a man gets a added coin) by diff desc order.
Complexity: O(nlogn)

208 Toral Tickets
Author: Amber
Method: Math – Polya
Detail:
1)enumerating permutations.
2)finding the amount of circle in permutation.
3)calculate answer by Inc,Div based on HP
Complexity:
O(n^2) for enumerating
*O(n^2) for finding
=O(n^4)
Notice:
It's Rotate not Mirror!!!!!

210 Beloved Sons
Author: Amber
Method: Hungary for Max Weighted Match
Complexity: O(N^3)

214 Weird Dissimilarity
Author: Amber
Method: DP (like LCS)
Clariry:
The problem is
A is subseq of P. B is subseq of Q. A,B is given. Minimize Dist(P,Q).
F= Min(
F+D[A,MinA[A]]
F+D[MinB],B[j]]
F+D[A,B]
)
Here
MinA s.t. D[x,MinA[x]]=Min(D[x,y]|for y=1..n)
MinB s.t. D[MinB[y],y]=Min(D[x,y]|for x=1..n)
Complexity: O(n^2)

217 Two Cylinders
Author: Amber
Method: Simpson
Detail:
Let r1<=r2. Cylinder r1 lies on x axis, and r2 lies on y axis.
(x,y,z) in intersection, s.t.
z^2+x^2<=r2^2
z^2+y^2<=r1^2
=>
f(z)=sqrt(r1^2-z^2)*sqrt(r2^2-z^2)
ans=8*integral[ f(z) from 0 to r1 ]
It's hard to find directly.

The trapezia approximation formula costs too many time to get a low precision.
So the parabola approximation formula (Simpson) is fit.

Given a(lower);b(upper);n(the number of dividings);f[x](integral function)
trapezia: Ans=((b-a)/n)*((f[a]+f)/2+Sum[f[a+i*(b-a)/n],(i,1,n-1)])
simpson: Ans=(b-a)/(3n)*(f[a]+f+2Sum[f[a+2i*(b-a)/n],(i,1,n/2-1)]+4Sum[f[a+(2i-1)*(b-a)/n],(i,1,n/2)])

see http://www2.gliet.edu.cn/cai/dept7/math/shuxueshiyan/shiyan5.htm
Complexity: O(N), N is the number of dividings.
Notice: None

218 Unstable Systems
Author: Amber
Method: Binary Search+Match
Detail: Max-Min Match Problem
Complexity: O(NMlogW), W denotes the Weight Range.
Notice:
1.It's important to match unmatch nodes firstly.
2.Weight may be negative.

220 Little Bishops
Author: Amber
Method: Normal-DP
Detail:
求n*n棋盘上放k个象的方案数

把棋盘相间的染成黑白格(用+,-表示),如:
+-+-+
-+-+-
+-+-+
-+-+-
+,-之间的格子不互相影响。把+,-分离出来(分别称为case A,case B),把棋盘45度旋转。
case A case B:
+ –
+++ —-
+++++ —-
+++ –
+
这样可以把象看成是车(走直线)。这个问题和原问题是等价的。问题还可以等价转换为:
+ –
+ –
+++ —-
+++ —-
+++++

令 n(i) 为 第i行的格子数
F(i,j)= //前i行要放j个象
F(i-1,j)+ //本行不放
F(i-1,j-1)*(n(i)-j+1) //本行放, 方法有 n(i)-(j-1) 种,因为j-1个象已经放好,占了恰好j-1列。
按上述方法分别处理case A,case B.
Complexity: O(n^2)
Notice:
1)
When N=1, case A and case B are overlap.So do special processing.
2)
Assign i bishops to case A, and K-i bishops to case B.
s.t. 0<=i<=NumA, 0<=K-i<=NumB
Let Left=Max(0,K-NumB) Right=Min(NumA,K)
So Left<=i<=Right

221 Big Bishops
Author: Amber
Method: Normal-DP
Detail:
求n*n棋盘上放k个象的方案数, 大数据版。
详见SGU 220
Complexity: O(n^2)
Notice: 详见SGU 220

222 Little Rooks
Author: Amber
Method: Math
Detail:
求n*n棋盘上放k个车的方案数
P(n,k)*C(n,k)
Complexity: O(k)
Notice: None

223 Little Kings
Author: Amber
Method: Set-DP
Detail:
求n*n棋盘上放k个王的方案数
基于状态压缩(编码)的DP. (参见noi2001 cannon)
Complexity: O(StateNum*N^3)*O(StateNum)
StateNum=O(2^n)
Notice: None

224 Little Queens
Author: Amber
Method: DFS
Detail:
求n*n棋盘上放k个后的方案数
Notice:
这里没有任何剪枝和优化,算法其实可以更快的(可以快10倍)

226 Colored graph
Author: Amber
Method: BFS
Detail:
Split a vertex (n) by three vertex (n,c) which means reaching n through last edge with color c.
then BFS.
Complexity: 3*O(N+M)

228 Archipelago
Auther: Amber
Method: Geometry
Detail:
已知正n边形的两个点与他们的编号,求正n边形.
主要就是找圆心.
注意方向的处理.
Complexity: O(N)

230 Weighings
Author: Amber
Method: Topological Sort
Detail:
The problem is to find any of solutions which can not conflict with the inequality.
Sort it by topological order by a queue.
Complexity: O(N+M)

231 Prime Sum
Author: Amber
Method: Filter Primes + Enumerate
Detail:
利用 奇素数+偶素数(2)=奇素数
实际上就是找孪生素数.
Complexity: O(N)

238 Uncle Vasya and Bags for Potatoes
Author: Amber
Method: Maths
Detail: 每次操作等于把一个根节点x的第二层结点与所有根结点(除了x)交换,记为Op(x)。
同一个操作Op(x)出现两次以上(含)是没有意义的,图没有变化。
所以一个操作序列(无重复项),唯一的确定一种图。
若操作序列最后一步是Op(x),则操作序列前一步一定是Op(y),y是x在原图的的父亲。
显然这是必要的,否则x决不会到根层。
进一步,可知若要执行操作序列最后一步是Op(x),则操作序列至少是x的祖先序列。
并且这是充分的。若在祖先序列中插入一项的话。则必然被插入的位置原来的操作Op(x)一定不能执行。
必须再调用一次x的父亲。这与操作序列无重复项矛盾。

239 Minesweeper
Author: Amber
Method: DFS
Detail: 给出扫雷游戏 N*2 的左列信息,求右列的可能的放置数

240 Runaway
Author: Amber
Method: Binary Search + Dijkstra
Detail:
易知容忍度是满足二分的性质的。
因为变化率为正,所以早到一条边,比迟到这条边时的温度低。
这个贪心,可以利用最短路标号的性质满足。
Complexity: O(N^2LogH)

242 Student's Morning
Author: Amber
Method: Preflow push
Detail: The feasible flow with lower bounds.

244 Height, Bisector and Median
Author: Amber
Method: Math Discuss + Binary Search
Detail:
Put one point of triangle in (0, H). And the base edge is on x axis.
One necessary condition of the existence of solutions is H <= D <= M.
If H = D = M, there exists a solution of the isoceles triangle.
If H = D < M, there exists no solution.
If H < D = M, there exists no solution because the 0-area triangle is not allowed
If H < D < M, there exists solution that the point D of the bisector is between point H and point M.
The bisector inference of Stewart theorem:
D' = 2 * Sqrt / (B + C), Here 2P = A + B + C.
We can search the two points at the base edge.
S = Sqrt[M^2 - H^2], B = Sqrt[H^2 + (S - X)^2], C = Sqrt[H^2 + (S + X)^2], Here X is the searching value.
D' is monotony. So we can binary search X.

246 Black & White
Author: Amber
Method: Find the principle
Detail: 对于这种一维数列的数学题,一般写暴力程序,观察猜想出规律即可。
Notice: 当N=MaxLongint, (N + 1) div 2 会溢出,要用N div 2 + 1

247 Difficult Choice
Author: Amber
Method: Maths + HP
Detail:
猜想得出 Floor[C(2P, P) / P] + 2。
Thanks to CX.

248 Integer Linear Programming
Author: Amber
Method: Math+Enumerate
Detail:
when n=1, if v mod c[1]=0 then ans=v div c[1] else no answer.
when n=2, solve (c[1],c[2],v)
Let gcd(c[1],c[2])=d
Find all solution of c[1]*x+c[2]*y=v :
x=x0+t*c[2]/d
y=y0-t*c[1]/d

Cuz x>=0, y>=0, the range of t can be got.
Discuss c[1]>c[2] and c[1]<=c[2], and minimize x+y=x0+y0+t*(c[2]-c[1])/d.

when n=3, enumerate x[1]. Solving (c[2],c[3],v-x[1]*c[1]) is the same as that when n=2.

Notice:
Number must be Int64.
e.g. X:=X*C; that 10^6*10^6=10^12!!!

249 Matrix
Author: Amber
Method: Construct
Detail:
考虑线形情况L[x],这里L[x],L[x+1]满足相邻定义。
N L
L1: 000 001
L2: 000 001 011 010
L3: 000 001 011 010 110 111 101 100
….
可以发现 Ln 由 L(n-1) 和 L(n-1)的反转(前面添一个1)组成
所以可以构造出L.

令Matrix为D[x,y]
模仿网格的编码P[x,y]=(x-1)*M+y
构造出D[x,y]=L[x]*2^m+L[y]
Complexity: O(2^(n+m))

254 Strange Random
Author: Amber
Method: Simulate Directly
Detail: 空间正好开得下,直接模拟,当模拟到一定次数后,就清理一遍。经试验, 大概清理10-20次最快。

255 Winsock 3 Beta
Author: Amber
Method: Math + (Precompute + BinarySearch)
Detail:
A means a sequence of the valid M.
A(0)=1, A(n)=A(n-1)+n
Seek for each query in A by binary search.

256 Balloons
Author: Amber
Method: Set-DP
Detail: 由于休息时间最多只有4分钟,且每分钟只有1个人工作,所以状态表示中只需要保存前4分钟工作的人即可。
即F[t, s]:s表示前4分钟工作的人的序列,t表示当前时间。
Complexity: O(Ans * C(N, 4)), 这里Ans <= M

259 Printed PR
Author: Amber
Method: Greedy
Detail:
由于打印的总时间是一定的
希望后面打印的送出的时间尽量短
贪心: 送出的时间越长的越早打印
Complexity: O(n^2) for sort
O(n) for greedy

260 Puzzle
Author: Amber
Method: Gauss Elimination
Detail:
i表示当前所在方程
j表示当前处理变量
若没有方程有j变量,则j++;
否则,交换方程i与有j变量的方程,用方程i,消去所有含有j变量的方程的j变量,j++,i++。
Notice:
写这题之前,我的高斯消元有2种错误的写法。
1. 化为对角矩阵,实际上只有可逆矩阵才可以这样。
2. 化为上三角矩阵,错误的认为第i个方程没有第i个变量就可以跳过。

261 Discrete Roots
Author: Amber
Method:
n的原根(primitive root modulo n) g 定义为:
对于所有与n互质的数与每次乘g模n的操作组成能组成循环群, 记为Zn*.
称g为n的原根.
n有原根 当且仅当 n 有形式 1, 2, 4, p^k, 2p^k,这里p >= 3的素数, k >= 1 的整数。
原根的快速判定:
若g ^ (Phi(n) / Pi) mod n都不等于1,则g为n的原根。
Phi(n)为n的欧拉函数,即1到n-1与n互质的数的个数。这里Pi为Phi(n)的质因数。

本题中n为质数, 则Phi(n) = n – 1, 找到原根g就可以将{1, 2, .. n-1}的数与{g^1, g^2, …, g^(n-1)}建立一一对应关系。

x^k = a (mod n)
令g^y = x, g^t = a,则有 g^yk = g^t (mod n)。
因为n是质数,所以方程左右都不可以为0。就可以将这n-1个取值与指数建立对应关系。
<=> ky = t (mod (n – 1)),关于y解模线性方程就可以了。

下面就是g^t = a怎么求解:令s = floor(sqrt(p)),则有 t = b * s + r(0 <= r < s), 即有 g^t = g^bs * g^r
将所有g^r放入有序表中,从小到大枚举b,g^bs * g^r = a 则把g^r看成未知数解模线性方程。
若解能在有序表中二分查找到,则停止枚举,t = bs + r。
Complexity: O(G(P) * H(P - 1)) + O(Sqrt(P) * (Log(P) + Log(Sqrt(P))) + O(LogP)
G(N)为N的原根,H(N)为N的质因数个数。
Notice:
程序中变量名N,表示不一定需要是质数;而变量名P,表示一定是质数。

262 Symbol Recognition
Author: Amber
Method: IDS
Detail:
首先可以排除所有K块都一样的格子,剩下L个格子。
答案A下界为Ceil[LogK],而A增加1,则重复的概率就大大减小(因为相同格子都去掉了)。
所以可以从小到大枚举A,再枚举所有的方案。
因为K只有6,就是说A的下界为3。
复杂度似乎是 O(C(100, 3) + C(100, 4) + …),估计最多迭代到6。
而实际上复杂度远没有那么高。
因为排除所有K块都一样的格子, 则若L越大, 在A很小的时候就越容易找到解; 反之, 若L比较小, A可能比较大, 但C(L, A)依然很小.

264 Travel
Author: Amber
Method: Adjusting (Stable marriage problem)
Detail:
问题是求完全二分图的稳定完备匹配。
对于每条边有两个权: 由x指向y: Wx(x, y); 由y指向x: Wy(y, x), 权值均不相同.
稳定:不存在x与y匹配, x'与y'匹配, 使得 Wx(x, y') > W(x, y) 且 Wy(y', x) > Wy(y', x).

完备婚姻的算法 — 延迟认可算法

每一位女士被标记落选记号开始。
找到一位落选女士u,在所有尚未拒绝她的男士中选择一位被她排名最优先的男士v。
若这位男士v, 原来没有配对女士;或有一个临时配对女士w, 但在v看来w不优于u。
则让男士v选择女士u,拒绝原来的临时配对女士w,将u标记未落选,将w标记落选。
这时实际上只是临时决定让v配对u。最终的决定是在算法结束时才确定,即标号修改法。
也是调整法思想的体现。

由于每次总有一个女士被一个男士拒绝。所以最多拒绝N * (N – 1)次。
算法复杂度为: O(N^2)。

267 Optimist vs. Pessimist
Author: Amber
Method: Geometry+Data processing
Detail:
Problem is hard to understand.
Given set R, N=|R|, K
Maximize and minimize GotArea(A) for all A s.t. Area(A)=max and |A|=K.
Area(A) is the area summary of each x in A.
GotArea(A) is the area summary of each x in A which can be cut.

Maintain a orderly ranklist for first K elements.
Let S is the last of ranklist.
Keeping Area(ranklist)=max, replace S by all x that x's area is S and find maximum and minimum of GotArea.

269 Rooks
Author: Amber
Method: DP+HP
Detail:
由于放上一个rook,就等价于删去其所在列和行。所以有序化的数据后,问题是等价的。
f(n,k)=f(n-1,k-1)*(r(n)-(k-1)) //选
+f(n-1,k) //不选
可用滚动数组优化。
Complexity: O(NK), Here HP operation is considered O(1).
Notice:
可以透过"沟"攻击, 比如下面p可以攻击q.
xxp
x
xxq

271 Book Pile
Author: Amber
Method: Data Processing(Loop Queue)
Detail:
维护一个长度为K的有一个是否反向的标志的数据块。
因为只关心最顶上的K个数据,所以只要有add操作,就可以输出掉(pop)一个最下面的数据,然后加入当前add的数据至顶(push)。
用一个双端循环队列(两端都可以加数据)来实现这个数据块,有两个指针head,tail。正向的话,tail为顶部。反向则head为顶部。
具体见程序。
Notice:
(1)
String operation in Pascal is slow!!! I got TLE n times.
TLE -> AC
String -> String[8]
(2)
Be careful that Boundary K=0!

272 Evacuation plan
Author: Amber
Method: BFS + DFS
Detail:
先求出最短路标号
再搜索所有最短路
因为题目要求是一个极大的方案,不是最大,所以搜索的时候,可以打访问标记。
因为找到的最短路可能会阻挡其他的最短路。
故复杂度是O(N + M)的。

273 Game Po
Author: Amber
Method: DP
Notice:
数组DP的速度很快。
记忆化搜索的速度特别慢, TLE n times
State:
DP
396257 13.07.06 20:05 hupo001 273 .PAS Accepted 300 ms 557 kb
记忆化搜索
396252 13.07.06 19:46 flower 273 .PAS Accepted 1976 ms 1029 kb
Complexity: O(4*N^3*L), 实际上远没有这么高

274 Spam-filter
Author: Amber
Method: Simulate
Notice: Some detail such as Word isn't empty etc.

275 To xor or not to xor
Author: Amber
Method: Recursion
Detail:
问题:二进制下L位的N个数Ai,选出一些,按xor运算,组成L位的最大的数X.
可以这样以递归思想处理:
0.重复1-4,直到L=1
1.找出一个第L位为1的数A(i),找到转2,否则转4
2.若X的第L位为0,则X=X xor A(i).
3.使所有第L位为1的数A(j), A(j)'=A(j) xor A(i)
4.这样问题的规模减小到: L-1位的N个数Ai',组成L-1位的最大数X'.
由于可能有A(i)'=A(i) xor A(j),
所以这样处理出的X,就有很多个相同项: X=(A1 xor A1 xor … xor A1) xor (A2 xor A2 xor … xor A2) xor …
但由于有P xor P=0,可以两两消掉相同项.这样的X就是题目所求的X,X=A(i1) xor A(i2) xor …,此法是可行的.
Complexity: O(64*N)

276 Andrew's Troubles
Author: Amber
Method: Simulate

278 Fuel
Author: Amber
Method: Find convex hull
State: Accepted
Detail:
See sgu_278_report.doc

285 What? Where? When?
Author: Amber
Method: Set-DP
Detail:
箭头转动:随机一个位子,若当前位子已取过,则转到下一个位子,直到箭头所指的位子未取过。
就是说,在已取过的位子形成的集合不同的情况下,每个位子取到的概率不同。所以这些概率都需要分别计算的。
所以采用集合型DP。
Complexity: O(6 * 6 * 2^13 * 6)
Notice:
题目中,对于如何箭头转动的描述,我一直搞错,拖了很久。

288 Best Tournament Schedule
Author: Amber
Method: Construct
Detail:
若N为奇数,那么增加一个人表示轮空的,使得N为偶数。
设第r轮X的对手为Xr。
若2*X = r (mod (N – 1)),则Xr = N
否则X + Xr = r (mod (N – 1)),(这里把编号0看成第N – 1个人)
命题1:同一轮中没有对手重复的,即若X <> X', 不存在Xr = X'r。
证:反设Xr = X'r,则 X + Xr = r, X' + X'r = r (mod (N – 1)) => X = X' 矛盾。
命题2:同一人中没有与重复对手比赛,即若r <> r', 不存在Xr = Xr'。
证:反设Xr = Xr',则 X + Xr = r, X + Xr' = r' (mod (N – 1)) => r = r' 矛盾。
综上构造成立。
Complexity: O(N^2)

289 Challenging Tic-Tac-Toe
Author: Amber
Method: Memorized Search
Detail: Search all the states by Max-Min Search

291 Evolution
Author: Amber
Method: BFS
Notice:
The test range in description may have some mistakes.
1 <= Q,C <= 1000, But I got WA.
When MaxSize = 1001, I got AC.

292 Field for the Cemetery
Author: Amber
Method: Maths + HP
Detail:
A = Q mod N
B = C mod N
情况1:如果A + B <= N就直接放,最后剩下一个A * B的空区域,Ans = (Q * C - A * B) / N
情况2:如果A + B > N 就先在外面交叠的放一圈,如:
AAAB
D B
D B
DCCC
把Q * C的问题转化为(Q – 2A) * (C – 2B)的问题。而(Q – 2A) mod N = N – A,(C – 2B) mod N = N – B。
因为A + B > N, 有N – A + N – B <= N,就是情况1。所以Ans = (Q * C - (N - A) * (N - B)) / N。
分析:
(N - A) * (N - B) = N ^ 2 - (A + B) * N + A * B --(1)
当A + B <= N时 (1)式 >= A * B
当A + B > N时 (1)式 < A * B
故这样分类摆放是最优的。

293 Game with Q an C
Author: Amber
Method: Construct
Detail:
由于我们要保证每次加入2个字符后,只能用2个交换维护,就是说只能有4处与上次回文串加2个字符不同。
什么样的子串有这个性质呢?
维护一种稳态: 就是以QCQC…QC这样交错开头, 多出的字符都放在中间, 正中间是含有奇数个字符的字符。
后一部分是前部分的翻转.
如: 5个C, 8个Q: QCQC|QQCQQ|CQCQ (第一竖线前为交错部分, 第一竖线后到正中间是多出的字符. 正中间是奇数个字符的C。
可以证明,最多只要2次交换维护就可从上一个稳态,到这个稳态。

算法就是每次构造稳态,找到那些地方的字符与上次的不同,交换即可。
Complexity: O(N^2)

295 Identifier Duplicated!
Author: Amber
Method: Maths (Combinations)
Detail: Ans = 2^[Duality Letter number]
* [Sum all space's number cases which will be inserted into the gaps between words.]

296 Sasha vs. Kate
Author: Amber
Method: Greedy
Detail:
For each K, delete the last digit of the non-increasing order from start point.

297 Fair-play
Author: Amber
Method: Maths
Detail: Mod Sum Directly

298 King Berl VI
Author: Amber
Method: Shrink strong connected block and Topological sort
Detail:
题目就是给出了m个不等式,可以抽象成有向图。
若图中有非0圈,则不等式中有矛盾,无解。
若图中有0圈,则圈中的点是等价的,可以收缩圈(强连通分支)。
这样就得到一个DAG。
在正向图中,拓扑排序时,可以更新到达每个节点的最小值。
同样在反向图中,求出到达每个节点的最大值。
若出现某个节点的最大值<最小值,则无解。
最后,由于minimize AN - A1,只要令A1为其最大值,AN为其最小值,再做一次拓扑排序的更新即可。
Complexity: O(N + M)

299 Triangle
Author: Amber
Method: Sort+HP

300 Train
Author: Amber
Method: Enumerate
Detail: Find the minimum circle length leaded by the intersection point.

301 Boring. Hot. Summer…
Author: Amber
Method: Dijkstra + Topological scan by distance order
Detail: 先求出X – Y的最短路图,最短路图是DAG。所以可以以离X的距离作为拓补序,进行统计。
Complexity: O(N^2)

302 BHTML 1.0
Author: Amber
Method: Stack Processing

304 Mars Stomatology
Author: Amber
Method: Greedy + DP
Detail:
If there is only 1 gum, then we can use greedy method
that after sorting the values of teeth, scan the values from small to large until exceed the money limit.
State (M, N) denotes minimum values of choosing M gum, N teeth.
F[M, N] = F[M - 1, N - K] + Cost[1..K]
Here Cost[1..K] means the summation of the first k sorted values from small to large.
K is the number of the teeth connecting to M.
Complexity: O(N^2M), but in fact it should be O(N^2).

305 Exhibition
Author: Amber
Method: Special Match
Complexity: O(N^3)
Detail:
We use hash to implement the large part Y. But the used node is O(N) at most.

 


ACM Sgu Vol 3 弱题总结

2008年4月6日星期日

 
300.给一条与坐标轴平行的铁轨,可能自交,问设计的火车最长是多少。
直接模拟,每找到一个相交就拿构成环的长度去更新答案
P[j]..........
| |
| |
P[i]---O-----P[i-1]
|
|
P[j-1]
302.无聊模拟题

304.容量为 P(P<=106)的背包, N个物品,每个物品属于一个类别,如果在第 i类里取了至少一个物品,则必须花费额外 Bi的容量。问取到的物品数最多是多少。
DP:用f(i,j)表示只取前i类物品取了j个的情况 O(N^2)
f(i-1,j)-->f(i,j+k)
305.N(N<=100)个等差数列Ai,Bi (X=Ai+Bi*k k为自然数) 用1~M(M<=10^9)中的N个数给等差数列标号,使得拥有在自己序列中的标号的等差数列总数最大 虽然M很大,但是一个等差数列最多用到前N个数,待选标号的集合不超过N^2, 然后最大匹配 ~_~ 309.给N个整点(N<=20000)求最小的长度D使得三个边长为D的正方形能覆盖点集(允许Overlap). 首先要二分答案,然后 我一开始想肯定要覆盖最左/右/上/下的一条边,但是确定了一个左边。。另一个坐标无法确定?后来经过提示发现:放正方形的时候,最小覆盖当前点集的矩形的四个角其中一个一定要被正方形盖到。但是我想了好久也不知道究竟应该放哪个角。。后来发现枚举每次应该盖哪个角就行了 =.= 310.长度为 N01串,每个长度为 M的子串都有至少 K1,问有多少种方案。
简单的状态压缩Dp...

311.有两种操作:1.运来价格为P(P<=10^6..整数!)的Ice-Cream K个(K<=10^6) 2.一个人用T(T<=10^12)的钱买最便宜的n个Ice-Cream,如果当前有>=n个Ice-Creams而且最便宜的n个价格不超过T。。就输出"HAPPY"否则输出"UNHAPPY"
关于价格的线段树,flag记当前区间是否被整体删除,sum cost分别表示在当前价格区间[a,b]内共有的冰激凌数量和总价值
316.无聊模拟题

317.一条 数轴上的路,信使要从 0移动到 T,但是他必须骑马移动。路上有 N(N<=5000)个马厩,每个马厩有若干匹马,每匹马有两个属性:速度和能跑的距离,问到达终点所用的最短时间。马的总数<=10^5 f[i]=f[j]+cost[j][i] 顺推,把从每个点出发的马按速度排序,每次递推找出当前速度最快的马,如果跑当前这个点路程不够就抛弃(后面的点更不行了@_@) 用堆维护即可 318. 有一些用户和一些资源,每个用户都有一些需要的资源,要求找出一种资源的分组方式,使得每个用户都能得到他想要的资源,并且不能得到任何一个他不想要的资源(每个用户可以享有多个资源组),并且资源分的组数最少。 
如果两个资源的需求情况(需要的人的集合)是一样的,这两个资源就是等价的,显然等价具有传递性。。DisjointSet..方法很多..

320.  n*m的方格上写了 0~9的数字,同数字的相邻格看作属于同一个势力。如果一个势力的格子数达到或超过 k,则称其为一个大势力。如果一个格子属于大势力,或被某个大势力完全包围(切断了它到整个地图边缘的所有途径),则称其为危险的。问有多少危险的格子。
这题在集训队论文里有一个神奇的方法:将小势力块每个方格拆开看成大势力,从边界沿着不同大势力之间的隔离墙往里面灌水,如果每个格子四个角都能被灌到,那么它是能被访问到的。
注意这里的隔离墙不仅指边还指这种情况
AC
BA 两个A有顶点相连,这里我们把这个顶点看作隔离墙的门=.=...水是不能往门里流的,B或C边的水只能拐弯而不能穿过门

用朴素的方法+一定的优化 或者构图求割点也可以

321.简单的树贪心

322.给出两个生成树,每次可以在第一棵生成树上减去一条边同时加上一条边,要最少的操作次数变为第二棵生成树,在每次操作结束后都要求图依然是生成树。
每次找一条在第二棵不在第一棵的边,连上它,形成的环里面肯定有二不包含的边(否则还是生成树?),删去

323.有一张无向图,每条边有一个权值和一个颜色。修改某条边的颜色的费用是这条边的权值。求最小的花费使得产生某种颜色的生成树
就是Kruskal..先把所有边排序,然后枚举生成树需要的颜色,判断一下就行了,而且剪枝很方便

324.无聊模拟题 减号随便分配
325.to do...

326.给定了一些队已经比赛的成绩,以及他们之间剩余的比赛场次,问第一个队友没有取胜希望(胜利数达到所有队中最大)
先让第一个队把剩下的比赛赢掉,其他队把跟外部队的比赛全部输掉,然后内部分配比赛的“胜利果实”。显然每个队不能超过S1-Si..网络流分配一下这些比赛结果

327.给一些串,找到一个最短的包含他们全部的回文串。 不会做 :( 貌似是Dp :(
328.找规律的SG函数题
329.把一个边长是 N(N<=5)的三角形划分成 X2个小三角形,用 4种图案给它染色,要求每条边两侧的颜色相同,给了 4种图案的个数,问有多少种方案。
记忆化搜索+状态压缩..我的常数控制得不好..只能去const :(

330.给两个数 AB,问每次给 A加上 A的一个大于 1小于 A的约数,能否得到 B。并输出一个方案。
显然观察偶数的二进制数********0 每次加上 10...0(一共是原数右端连续的0的个数,前提是不要超界) 这样总可以得到比它大的任何偶数
把A B分别搞成两个偶数A' B' A<=A' B<=B' A'<=B',用上面的方法就行了 334.把一个 9个格子组成的连通图形切成尽量少的几份,然后拼成一个 3*3的正方形。
加深搜索,每层搜索一种“零件”的形状,同时枚举在原图形的位置(细节有小技巧,略)

336.不会做 :(

337.简单的枚举 O(N^2)

340.无聊模拟题 again..
342.高精度对小数取余 + 简单的Dp
F[i]表示当前位付钱(显然跟前面一位就没关系了。)
G[i]表示当前位找钱(前一位得多付一个来填这一位的洞)

344.BFS
346.不无聊的模拟题 @_@
347.排列N个串使得合成的串字典序最小
排序: 两个串Sa Sb,若Sa+Sb<=14) 显然第一个数我们可以随便选(不妨为0),然后搜索 @_@ 秒杀 353.无聊模拟题 355.给1~N涂色,A如果是B的约数 A B不能同色..问最少需要多少种颜色 看sample一眼就看出来怎么做了吧... 357.一个电视遥控器,某些键坏掉了。。问最少需要多少部从A调到B。 按数字选节目只可能有一次。。枚举一下“换乘点” 358........ 359.@_@_@_@_@_@ 361.N*M的格子 2*3和3*2的矩形内都正好有两个旗子 给最小方案 枚举一行。。就出来了 362....... 365.简单的递推 366.60000个pair Ai,Bi(-50<=Ai,Bi<=50) 选出20个使得SA-SB最小,满足最小的情况下SA+SB最大 把Ai-Bi分类后Dp即可

你可能感兴趣的:(acm之路--好题/陷阱,ACM训练题库)