随笔分类 - USACO
摘要:第二种的答案很精巧: 商中出现循环小数,是因为分母除以了3、5、7及其乘幂,而2、5及其乘幂是仅有的不使分母出现循环小数的数(即任何数除以2、5都不会出现循环)。所以,我们可以利用这一点得出出现循环前的小数数位。 在进行竖式除法时,都是给每个余数乘以一个10进行下次运算(就是补上一个0),而这个动作也可以视为被除数(分子)被乘上一个个10,而10也可视为5*2,即:当我们把分子分母分别用2和5进行...
阅读全文
摘要:解决方法:Dijkstra 但是case2在本机运行结果正确,上传后运行出的结果很奇怪。 本机运行结果 上传后运行结果 数据case2:25m Z 1000A m 1000B m 999C m 998D m 997E m 996F m 995G m 994H m 993I m 992J m 991K m 990L m 989M m 988N m 987O m 986P m 985Q m 984R ...
阅读全文
摘要:(木有想到解决办法) 背景知识: 最短路径算法 (1)Dijkstra算法——单源最短路径算法 (2)Floyd算法——每对顶点之间的最短距离 Floyd-Warshall算法,简称Floyd算法,用于求解任意两点间的最短距离,时间复杂度为O(n^3)。 基本原理是;动态规划 http://www.cppblog.com/wing/archive/2011/03/10/141511.html (...
阅读全文
摘要:dfs深度优先, 进行到测试数据4的时候,出现错误。猜想应该是“going over the maximum specified memory limit”,因为开的数组边界应该没有问题,前面的测试用例也通过了,应该算法没问题。Run 4:Execution error: Your program (`maze1') exited with signal #11 (segmentation vio...
阅读全文
摘要:条件:具有最优子结构;子解集合具有重复 最大子段和 【问题描述】 给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整均为负数时定义子段和为0,依此定义,所求的最优值为 Max{0,a[i]+a[i+1]+…+a[j]},1<=i<=j<=n 例如,当(a1,a2,a3,a4,a5,a6)=(-...
阅读全文
摘要:完全没找着方法 结果看了别人的答案,竟然说是简单的dfs就好了~ (1)本来还自以为聪明的决定先计数那些和别的编码距离小于给定值d的个数,然后排除不满足给定n的个数。结果发现根本就是给定集合的排列,每个编码个的编码距离都是一定的。这样计算下来每个的值都相同。 看了网上别人做的代码,模仿着使用dfs计算 (2)只能老实的使用dfs,遍历解空间 每个编码只有两种情况:1在解集合中2不在解集合中 ps...
阅读全文
摘要:(1)首先想到的是查找到添加入一种饲料后,使还需要的维他命数目最少。 在第3个测试上出现问题 4 1 1 1 1 4 1 1 0 0 1 0 1 0 0 1 0 1 0 0 0 1 按照这种思路,肯定会先确定有第一种饲料,但是其实是2和3的组合是最优的~ (2)使用排列组合,遍历所有可能的情况C(1)+C(2)+C(3)……C(n)= 2^G种组合 (3)在想到用排列组合后,开始想用广度优先遍历,...
阅读全文
摘要:(1)求最小公倍数和最大公约数 欧几里得公式求最大公约数 gcd(a, b) = gcd(b, a mod b) (a > b) 最小公倍数 = a * b / gcd(a, b) 求出1-n的公倍数,然后遍历每个元素,是否符合条件,符合就输出~结果求1-160的公倍数溢出 (2)最终还是老实的逐个产生,然后排序,输出 (3)一下为USACO给的第二种解答,根据分数的产生规律 Here's ...
阅读全文
摘要:()开始的考虑是在遍历图的过程中,一边标记本联通区域的单元,一边递归相邻区域的单元。 思路为: countRoom { for(有门的方向) { countRoom//递归 } for(有墙的方向) { cout++//计数联通区域 countRoom//递归 } } 但是这种情况下,总是不能获得每个联通区域完整访问 到现在也没想明白为什么 (2)改变思路,直接从每个没有访问过的单元格出发,得到...
阅读全文
摘要:我说怎么会在这个位置出现这个简单的问题,开了一个1000×1000的数组~果然出问题。 开两个1000的数组,一个保存上一行的计算值,一个进行本行计算就可以了。 看到测试数据后很震惊~~~~~~~~~满屏幕的数据哦~
阅读全文
摘要:(网上资料)解题思路:这道题目刚拿来真是不知如何入手,无耐,只好去baidu搜了一下,终于在其他牛人的博客中找到了这道题的解法,再加上提示,实际上这道题相当于只要考虑图示中的六种情形,图示如下其实也就五种情况了,再通过四个长方形的翻转,与四个图标号的互调,其实只要考虑4!*2*2*2*2种情况,再乘上5一共1920种可能,这样枚举,规模不大,就搞定了,注意一下排序就可以了,关于解决题目要用的公式如...
阅读全文
摘要:(1)本来要使用set进行中间状态是否出现的判断。突然想到可以简单点直接用一个3维数组来查看来保存中间状态,abc分别为3个维度,用到的空间也不大。(2)(加入这次是从a开始)第一次尝试,考虑到了b=》a和c=》a是不行的,但是没有考虑到bc之间的互相倒(如下绿线)。 (3)人品挫就是好不容易又调通了,竟然提交不了~~~~TTUSER: y j [foryjus1]TASK: milk3LANG: C++Standing by for compile/execution server...Standing by for compile/execution server...Standing b
阅读全文
摘要:(1)每个转换学列,最多可出现3次,因为如果出现4次就相当于转了一圈,等于0状态。一共有4^9次种情况,可以遍历者些情况。 例如如下: void dfs(int clocks[]) { for(int i1=0; i1<4; i1++) for(int i2=0; i2<4; i2++) for(int i3=0; i3<4; i3++) for(int i4=0; i4<4; i4++) for...
阅读全文
摘要:在文件的读入,我开始是先整个读入到一个数组中,然后遍历数组再去除无效的字符,这种方式下,在第二个测试数据上就超时了。 将字符串的处理在读入的时候就做,每次读入一个字符然后判断是有有效,有效的存入另外一个字符,并记录原来的字符位置。 感觉这两种方式都是O(n)的时间,奇怪为什么前一种会超时啊~~~???? (1)按照网上的 一个所谓的O(n)办法 以当前字符结尾的最长回文长度计算: fn(i) =...
阅读全文
摘要:题目:Name That NumberAmong the large Wisconsin cattle ranchers, it is customary to brand cows with serial numbers to please the Accounting Department. The cow hands don't appreciate the advantage of this filing system, though, and wish to call the members of their herd by a pleasing name rather th
阅读全文
摘要:首先顺序便利项链一次,计算出每个珠子向左能够延伸的最长距离在便利到结尾的时候,比较项链的开始部分与最后结尾处的珠子种类,如果相同对项链前面的部分进行更新。然后同样,倒叙相连一次,计算出每个珠子右向的最长距离更新项链的最后部分在做的过程中犯的错误:(1)没有考虑如果一整个项链是一种珠子的情况(2)例如bwrwrr中在,第一个r的时候其实前面的w的也应该算入r的左链的;但是如果从w后面断开的话,kw应该是一个链中的因此我加入一个辅助数组wn(表示到位置i前有多少个w),如果遇到s[i-1]是w,而s[i]不是w的时候计算左链就用wn计算;右链的计算同理。感觉这样子计算用到的辅助数组比较多#incl
阅读全文

浙公网安备 33010602011771号