摘要:从CF上面搜刮来的Java读取数值类型的方法.import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import jav...
阅读全文
Jackiesteedwww.github.com/jackiesteed |
|
文章分类 - ACM
摘要:从CF上面搜刮来的Java读取数值类型的方法.import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import jav...
阅读全文
摘要:K正规图, 就是指图中每个点的度数都是K的无向图.定义一下变量, V是图中点的个数, E是边的个数,K是每个点的度.这个问题其实不涉及什么算法, 分类讨论就行.1, K=0, 就是没有边的图.2, K>=V, 那么就无解, 因为每个点最大的度就是V-1.3, 0<K<V在继续讨论之前, 说一个事实, K*V=2*E, 那么就是说, 如果V是奇数, 那么K不能是奇数.所以要对于V进行一下分类讨论.3.1 V是偶数,那么, 可以按照这个方法构造, 把所有的点(绕着一个圆)排成一个环, 连接相邻的, 那么就构造了K=2(两点在环上距离为1), 而连接相隔一个点的点(两点在环上距离为
阅读全文
摘要:承接上一篇日志, 这一次实现的是创建NFA.输入是正则表达式对应的解析树(一个二叉树).输出是对应的NFA(一个有向图).思路也是递归实现, 对于一个树节点, 用两个子节点创建对应的NFA, 然后再根据树节点的类型将两个子NFA拼接起来.使用到的数据结构:struct State{ int code; //状态码, 一般是自动机中边上的字符, 特殊情况是S(开始), T(结束), FAKE(伪节点,导出空转移的边) State* out; //出边1 State* out1; //出边2 int lastList; //记录上一次所在的链表, 判重用的.};struct...
阅读全文
摘要:最近一段时间看了一点"柔性字符串匹配", 发现位并行算法在字符串匹配这个领域还是很有用的, 下面抒发一下鄙见.首先, 字符串位并行算法在acm界用的貌似并不多, 这跟算法本身的局限和人们对算法的了解有关.字符串位并行算法受限于机器字长, 所以不能用于模式串长度超过机器字长的情况, 这局限了该类算法的推广.但是由于位并行算法思想比较简单, 一般易于实现, 而且, 位并行这种手段本身也能保证算法性能相当可观.在字符串中的位并行算法, 基本是以单字符串匹配中的ShiftAnd算法和BNDM算法为基础, 扩展衍生的, 延伸到了多字符串匹配, 扩展字符串匹配和正则匹配里面.(这里的分
阅读全文
摘要:柔性字符串匹配, 介绍各种字符串匹配算法, 用来学习字符串算法不错.下面是我自己用C++实现的算法代码, 陆续贴上来...ShiftAnd算法:#include <iostream>#include <fstream>#include <algorithm>#include <cstring>using namespace std;typedef unsigned long long ULL;//ShiftAnd算法//做一些假定: 传入的模式串和text串都是小写字母.//为了减少一些复杂度.// 整形最长64位, 所以模式串最长支持64//
阅读全文
摘要:给定k个已经排序的数组,每个数组的长度是n。设计一个算法,把这k个已排序的数组归并成一个排序的数组。思路是取出k个数组的第一个元素, 建一个最小堆.然后不断地从堆顶取走元素x, 追加到结果数组中. 在x原来所在数组的下一个元素加到堆里面.重复过程, 直到k个数组都为空.=========================================================================================================外部排序指的是大文件的排序,即待排序的记录存储在外存储器上,待排序的文件无法一次装入内存,需要在内存和外部存储器之间进行
阅读全文
摘要:这一次增加的对结构体的支持, 但是还不很完善.下面具体讲讲:1.只允许在全局空间里面声明结构体(在局部的话, 需要局部作用于失效的时候也销毁结构体声明, 可搞), 形式如下:1 struct mm2 {3 int x, y;4 char ppp;5 };2.暂时不支持一边声明结构体一边定义一个相应的变量(这个也可搞), 例如:1 struct mm2 {3 int x, y;4 char ppp;5 }m; //this is not supported yet3.允许在全局空间和局部空间里面声明结构体, 同时允许初始化, 也允许使用{1, 2, 3}形式对结构...
阅读全文
摘要:承接上一篇日志,我对原来的解释器做一点小小的改动.大致增加了如下特性:1, 允许for(int i = 0; i < 23; i++) 这样使用for循环, 即在for的括号内部定义循环控制变量.2,增加了continue关键字.3, 增加了对一些新的数据类型的支持, bool, char, short, int, long, float, double都给予了支持.4, 增加了true/false关键字, 直接对bool变量赋值.关于增加新的数据类型这件事, 一开始我的想法是:定义一个结构体, 用来表达上面支持的所有类型, 该结构体会根据实际的类型返回正确的值. 1 struct va
阅读全文
摘要:承接上一篇日志, 我对原来的解释器做一点小小的改动.大致增加了如下特性:允许int, char变量在定义的时候赋值.if, for while等支持一条语句的循环体, 在ver1.0中, 作者为了方便解析, 限定了if, for等的循环体不能使用单条语句.对于switch的优化, 原来作者的代码里面不能在case后面加block{}(而这一点是比较必须的), 而且没有default项, 这两项都被改进了.对于if else语句的改进, 使得else 后面还可以接if语句.对于cout的改进, 支持endl, 输出换行.上面的大部分都是小改动, 但是涉及了对代码中小部分逻辑的修改, 如下:int
阅读全文
摘要:来自<C++编程艺术>.Herbert Schildt已经把很多基本的程序解析的技巧表达了出来, 不过现在的源代码比较脆弱, 经过我改进的代码也很脆弱, 所以, 如果你感兴趣, 请使用简单的代码来测试它.书中MiniCPP(理解为MiniCpp1.0)支持的特性如下:具有局部变量的参数化函数.嵌套的作用域.递归.if语句.switch语句.do-while, while及for循环.break语句.int, char类型的局部及全局变量.整型和字符型的函数参数.字符串常量(部分实现).return语句, 可以带或不带返回值.少量的标准函数.基本的运算符.返回整型的函数./*和//注
阅读全文
摘要:这是大二学离散数学的时候写的, 在这里留个档吧, 算是回忆...代码各种乱, 不改了. 1 /* header.h 2 *author : jackiesteed 3 *内容: 给定一个命题公式, 可以求出该公式的主吸取范式和主合取范式, 思路也比较简单, 就是暴力写的. 4 **/ 5 #include <string> 6 #include <stack> 7 #include <vector> 8 #include<iostream> 9 using namespace std;10 11 12 13 class formulaBase14
阅读全文
摘要:#Most of these code are picked from web, you can run them on python 2.4, enjoy it! # First N Fibonacci numbersprint map(lambda x,f=lambda x,f: int(x<=1) or (f(x-1,f)+f(x-2,f)): f(x,f),range(N))# Mandelbrot set(which can be either written in one line)print (lambda Ru,Ro,Iu,Io,IM,Sx,Sy:reduce(lambd
阅读全文
摘要:拿这篇文章除除草...问题:写程序模拟人操作电脑,在桌面新建text文件.求解过程:大概思路就是鼠标在桌面进行右键点击,通过弹出的PopupMenu来新建text文件,写入数据并保存.1,首先,要保证鼠标在桌面上,而不是被其他窗口遮挡,这样邮件点击才会弹出正确的菜单,那么如果我们原意的话可以让程序把其他窗口的进程都kill掉,但还是不要了,因为这没太大意义,也不能展现什么技术点.由我们来保证现在鼠标已经在桌面上,而且不是在某个图标上.2,让鼠标进行右键点击,弹出Popup菜单.对于Windows相关对象的操作,基本可以由pywin32中的库来实现.调用mouse_event可以在某个点出发鼠标
阅读全文
摘要:250pt:水题.仰慕戴牛手速帝:600pt:题目逻辑有点复杂,不过对于那些经验丰富的老油子,冷静思考的话难度不是太大.关键是把题目给的流程代码化简,然后找出可以优化的地方.截止比赛结束,我能看到的是,bag2,3,4是没有用的,本质是在bag 0 和 1 的变化,还有就是过程有点类似辗转相除法.然后在群里已经给出了解法和相关题源.流程最终的最简形式大概是:预处理出来每次循环不变的运算,然后就会发现循环其实是求 sum(N/i) (2 <= i <= D, 这里D是N最小的约数),当时白神cha大素数也是这个原因.如果比赛的时候你已经到了这里,这个题就可以完美解决了,求sum的优化
阅读全文
摘要:这场比赛打着很来感,虽然手速太慢,最后没改好C题.又一次变成黄人,上次已经是11年春天的事了,内牛满面.下面是A,B,C 3题的题解:A------------------------------------------------------代码--------------------------------------------------LLnMin=LLONG_MAX;LLnMax=0;cin>>N;for(LLi=1;i*i<=N;i++){if(N%i)continue;LLx=i,y=N/i;for(LLj=1;j*j<=y;j++){if(y%j)co
阅读全文
摘要:ASCII码(ASCII码:请参考百度百科的解释)0~31及127(共33个)是控制字符或通信专用字符,是不可见字符,如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格)、BEL(振铃)等;通信专用字符:SOH(文头)、EOT(文尾)、ACK(确认)等;ASCII码值为 8、9、10 和 13 分别转换为退格、制表、换行和回车字符。它们并没有特定的图形显示,但会依不同的应用程序,而对文本显示有不同的影响。其余(32~126)为可见字符,其中ASCII码值为32的字符为空格。可以调用C++的cctype库中的isprint函数来验证,是可打印的则返回true.
阅读全文
摘要:KM算法是通过给每个顶点一个标号(叫做顶标)来把求最大权匹配的问题转化为求完备匹配的问题的。设顶点Xi的顶标为A[i],顶点Yi的顶标为B[i],顶点Xi与Yj之间的边权为w[i,j]。在算法执行过程中的任一时刻,对于任一条边(i,j),A[i]+B[j]>=w[i,j]始终成立。KM算法的正确性基于以下定理: 若由二分图中所有满足A[i]+B[j]=w[i,j]的边(i,j)构成的子图(称做相等子图)有完备匹配,那么这个完备匹配就是二分图的最大权匹配。 这个定理是显然的。因为对于二分图的任意一个匹配,如果它包含于相等子图,那么它的边权和等于所有顶点的顶标和;如果它有的边不包含于相等子图
阅读全文
摘要:做了一下SWERC2011的题目,总结一下.D:贪心,比赛的时候没有看出来,semilive上出的最多的~F:表达式求值,裸.G:基本是求2*N个累加和,然后在这2*N的序列上滑动长度为N的区间,每次logN的求出区间最小值~写了一个ST算法实现的rmq,竟然TLE了,不解,改用最小堆过的.H:裸.J:数论.基本是求出N!的因式分解中每个素数pi的幂xi的大小,然后对于xi为偶数的情况不做处理,对于xi为奇数的情况,从N!中除掉一个pi.最后得出N!除掉某些素数,即为所求.上面A出来的题目都是最水的,比赛时候只出来了FGH,中间出去eat了一个小时~后续有其他题目的话再更新上.semilive
阅读全文
摘要:这两道题都是基本的树形DP题目,但是有不是那么简单,按部就班的DP一般是过不了的.需要利用一些通过对题目观察而得出的信息,对题目的部分过程进行剪枝.SGU_134,当N>2时,度为1的点肯定不会是最优的节点,因此不需要对这样的节点进行判断(这一个剪枝就足够了).TJU_1750,如果在原图中,对于某一条边,这条边所在的最长路径不是全局最长D,那么修改这条边的位置是不会使D改变的,因此这一条边是不需要纳入考虑范围的(同样,这一剪枝就足够了).SGU_149,这个题树形DP(那种简单的DFS+记录)是过不了了,答案和树的直径有关.启发是,解题不只是固定模式的套用,更应该融合自己对题目的理解和
阅读全文
|