题号 | 标题 | 难度系数 | 算法 |
1100 | Final Standings | 50% | 反复统计 |
1101 | Robot in the field | 30% | 表达式求值 |
1102 | Strange Dialog | 60% | 动态规划或语法图 |
1103 | Pencils and Circles | 65% | 不错的几何问题 |
1104 | Don'k ask a woman about her age | 55% | 同余问题 |
1105 | Observer's coloring | 75% | 构造法 |
1106 | Two Teams | 40% | 贪心 |
1107 | Warehouse Problem | 50% | 同余问题 |
1108 | Heritage | 60% | 贪心 |
1109 | Conference | 40% | 二分图的最大基数匹配 |
1110 | Power | 25% | 求幂的余数 |
1111 | Squares | 60% | 计算几何 |
1112 | Cover | 43% | 动态规划 |
1113 | Jeep | 30% | 倒推的方法 |
1114 | Boxes | 45% | 组合数学问题 |
1115 | Ships | 50% | 深度优先搜索 |
1116 | Piecewise constant function | 40% | 模拟 |
1117 | Hierarchy | 50% | 树的性质 |
1118 | Nontrivial numbers | 40% | 搜索 |
1119 | Metro | 45% | 动态规划 |
1120 | Sum of sequential numbers | 40% | 解方程 |
1121 | Branches | 45% | 统计问题 |
1122 | Game | 40% | 我用的搜索 |
1123 | Salary | 35% | 贪心方法 |
1124 | Mosaic | 50% | 一笔画问题 |
1125 | Hopscotch | 48% | 模拟 |
1126 | Magnetic storms | 55% | 哈希排序 |
1127 | Colored bricks | 35% | 简单统计 |
1128 | Partition into groups | 58% | 贪心方法 |
1129 | Door painting | 45% | 贪心方法 |
1130 | Nikifor's walk | 55% | 构造法 |
1131 | Copying | 30% | 数学方法 |
1132 | Square Root | 65% | 标准算法! |
1133 | Fibonacci Sequence | 50% | 数学计算 |
1134 | Cards | 45% | 模拟 |
1135 | Recruits | 40% | 直接计算 |
1136 | Parliament | 35% | 树的遍历 |
1137 | Bus Routes | 40% | 递归打印 |
1138 | Integer Percentage | 50% | 动态规划 |
1139 | City Blocks | 47% | 离散统计 |
1140 | Swamp Incident | 45% | 贪心 |
1141 | RSA Attack | 55% | 标准算法! |
1142 | Relation | 45% | 组合问题。用递推求 |
1143 | Electric Path | 55% | 动态规划 |
1144 | The Emperor's Riddle | 90% | 动态规划(??) |
1145 | Labyrinth | 60% | 递归 |
1146 | Maximum Sum | 40% | 动态规划 |
1147 | Shaping Regions | 55% | 离散化处理 |
1148 | Building Tower | 85% | 组合数学难题 |
1149 | Sinus Dance | 30% | 简单循环输出 |
1150 | Digits | 40% | 统计+计算 |
1151 | Radiobeacons | 65% | 统计 |
1152 | The False Mirrors | 40% | 深度优先搜索 |
1153 | Supercomputer | 50% | 高精度计算 |
1154 | The contest of mega | 50% | 统计+求最值 |
1155 | Troubleduons | 55% | 贪心 |
1156 | Two days | 50% | 动态规划 |
1157 | Young Tiler | 45% | 搜索就行 |
1158 | Censored! | 80% | 麻烦的递推 |
1159 | Fence | 65% | 计算几何问题 |
1161 | Stripies | 45% | 贪心方法 |
1162 | Currency Exchange | 55% | 最短路算法 |
1163 | Chapayev | 80% | 麻烦的动态规划 |
1164 | Fillword | 30% | 直接统计 |
1165 | Subnumber | 70% | 搜索 |
1167 | Bicoloured Horses | 50% | 动态规划 |
1168 | Radio Stations | 55% | 搜索 |
1169 | Pairs | 60% | 构造问题 |
1170 | Desert | 65% | 计算几何 |
1171 | Lost in Space | 60% | 记忆化搜索 |
1172 | Ship Routes | 45% | 组合计数问题 |
1173 | Lasy snail | 50% | 构造 |
1174 | Weird Permutations | 35% | 构造 |
1175 | Strange Sequence | 60% | hash表/数学方法 |
1176 | Hyperchannels | 50% | 欧拉回路 |
1177 | Like Comparisons | 60% | 动态规划 |
1178 | Akbardin’s Roads | 45% | 计算几何 |
1179 | Numbers in Text | 50% | 简单统计 |
1180 | A stone game | 40% | 归纳 |
1181 | Cutting a painted polygon | 50% | 构造(贪心) |
1182 | Team them up | 55% | 动态规划 |
1183 | Brackets sequence | 45% | 动态规划 |
1184 | Cable master | 45% | 二分查找 |
1185 | Wall | 40% | 计算几何 |
1186 | Chemical reactions | 50% | 字符串处理 |
1187 | Statistical trouble | 55% | 字符串处理(读懂题目很重要) |
1188 | Library | 65% | 搜索 |
1189 | Pairs of integers | 50% | 数学问题 |
1190 | Chocolate tile | 40% | 统计与处理 |
1191 | Cops and Robbers | 40% | 模拟 |
1192 | Ball in dream | 45% | 数学问题(简单的等比数列求和) |
1193 | Queue to Exam | 50% | 统计 |
1194 | Handshakes | 30% | 简单计算 |
1195 | Ouths and Crosses | 45% | 博弈问题 |
1196 | History Exam | 40% | 统计 |
1197 | Lonesome knight | 35% | 简单统计 |
对于上面算法的一些说明 |
1100:由于待排序的元素个数相当多(最多150000个),这些元素值的分布却很集中,只有1到100。因此,常规的不稳定的排序方法在这里是不适用的。我们应该反复对这些元素进行统计,第一次统计值为100的,第二次统计99的……这样一来,算法的时间复杂度大约是M*Max(N),完全可以接受。 |
1102:对于这类匹配问题,最容易想到的方法便是动态规划。但是由于动态规划在滚动的时候涉及到一个指针和取模的运算,而且对于给定的字符是一一匹配的,因此效率比较低。较好的方法是所谓“语法图”的办法。可以先把所有的“单词”分解为“词根”,然后用一个图表示词根之间的相互关系。因而我们可以把对字母的操作转化为对词根的操作。这样一来,判断的效率自然提高不少。 |
1103:这是一个相当不错的几何问题。首先,我们可以过两个点取一条乘托直线(即所有不在线上的点都在线的同侧),设这两个点为A,B。对于其他所有点Ki(i=1,2,...,n-2),我们求出角AKiB的大小。由于任三点不共线,任四点不共圆,因此这些角AKiB的大小肯定不等。因此我们可以把这些角排序。又由于圆内角>圆周角>圆外角,所以假设大小恰好位于中间位置的角为AKjB,则A,B,Kj即为所求。 |
1107:我们不难发现任何两个“相似”的集合除以(n+1)的余数一定不等。而商店又至少有n个,所以…… |
1109:也是匈牙利算法,不过不涉及带花树,因此比较简单。 |
1111:值得注意的是,题目并没有说所有正方形的边都和x,y坐标轴平行。 |
1115:先把队列按长度排序,然后采用“双重深度优先搜索”即可。当然,这个题目还可以用随机化算法。 |
1116:我们可以开一个大数组,模拟两次定义的情况,最后做统计即可。值得注意的是,我们应该用数组的a到b-1元素表示区间[a,b)。 |
1124:我们把每个盒子看作一个点,如果盒子i里存在不属于这个盒子,而属于盒子j的木块,我们就在i,j之间连一条有向边。那么我们只用统计一下这个有向图至少要用多少笔才能画成(就是欧拉路径问题)。 |
1126:最好先建一个哈希表,然后记录数值的分布情况。然后每次在哈希表中检索即可。 |
1143:这个题乍一看是NP问题。但是稍加思考我们不难发现,最优的路径一定不自交。因此实际上这个题目是可以动态规划的。 |
1145:这个题目考察的主要是空间的优化。首先,我们应该用一个Byte存储8位0/1,这样就可以把整个地图存储下来。然后,就可以用一个递归的过程搜索结果。递归的时候同样要注意空间的优化。 |
1153:这个题目相当于求一个数x,满足1+2+3+...+x=m。即x(x+1)/2=m,x(x+1)=2m。又因为x^2<x(x+1)<(x+1)^2,因此我们大可不必解方程,直接用x=Trunc(Sqrt(2m))就行了。剩下的问题就是高精度开平方,建议采用二分求精的办法做。 |
1155:这是一个相当不错的题目,数学意味很浓。而解这个题目的核心是——染色法!首先,我们可以把这个立方体的8个顶点染成红色和蓝色,要求与红色顶点相邻的必须是蓝色顶点,反之亦然。然后,我们不难发现每次操作必然是同时改变红色顶点和蓝色顶点中的粒子数量。所以假如一开始红色顶点中的粒子总数跟蓝色顶点中的不等,问题一定无解——否则一定有解。有解的时候解的构造就比较简单了,大家自己动动脑筋吧! :p |
1182: 首先,我们分析一下分组的要求: 1、把所有的人分成2组,每组至少有1人; 2、每组之间的人两两认识。 非常明显,如果存在两个人A和B,A不认识B,或B不认识A,那么A和B一定不能分在同一组。因此,我们以人为结点重新构造一个图G。假如A和B不能分在同一组,那么就在G中增加一条无向边(A,B)。这样,我们就得到了一个较为“单纯”的模型。下面我们对这个模型进行简单分析。 我们先研究G的一个连通分量K1。对于这个连通分量,可以先求出K1的生成树T1。对于K1中的任意结点a,假如a在T1中的深度为奇数,我们就把a加入点集S1;否则我们把a加入点集S2(S1,S2最初为空集)。显然最后S1,S2的交集为空。 不难证明,如果存在不同结点p和q,p和q同属于S1或S2,而且G中存在边(p,q),那么要做到满足题目要求的分组是不可能的,应输出No solution。否则,我们就得到了连通分量K1的唯一分组方案:分为S1,S2两组。 对于G中的每个连通分量Ki,我们可以求出相应的S1i,S2i。最后,我们的目的是把全部人分为2组。也就是说,对于i=1,2,3,...,m,我们必须决定把S1i中的人分到第1组,S2i中的人分到第2组,还是做刚好相反的处理。由于题目要求最后两组的总人数差最小,我们可以用动态规划的办法来确定究竟选取上面的哪种决策。 不妨假设G中共有m个连通分量,记|S1i|=xi,|S2i|=yi(i=1,2,3,...,m)。我们用f[i,j]表示把前i个连同分量分为2组,且这两组总人数差的绝对值恰好为j是否可能。如果可能,f[i,j]=true;否则f[i,j]=false。初始条件是f[0,0]=true, f[0,x]=false(x=1,2,3,...)。然后我们可以按照如下方法确定f[i,j](0<i<=m, j>=0): f[i,j]= f[i-1, j-Abs(xi-yi)] or f[i-1, j+Abs(xi-yi)]; 当然,在求解的同时,我们可以记录路径。最后,res=min{i: f[m, i]=true}即为最佳分组的人数差,而它对应的路径就是我们要求的分组方案。 |