杂题
文章平均质量分 73
fengsigaoju
本科:南京邮电大学
座右铭:凤兮凤兮思高举!
展开
-
noj 1004线性表的操作
这道题本身没什么难度,主要是通过此题练习一下模板的用法(事实上完成此题时还查了一下模板部分的内容)有两点值得注意:1,颠倒时要用另外一个数组来保存原来的数组。 2.注意是删除所有元素直接上AC代码:#include using namespace std;template class SeqList {原创 2015-08-29 20:37:36 · 646 阅读 · 1 评论 -
KMP
KMP的核心就是next数组,next[j]存储的就是0~j-1的字符串前后缀最长长度.老实说,这个部分真心难,我也只是大概弄懂,套套版,等放假要搞搞清楚。poj3461#include #include int next[1000100];char p[1000100];char s[1000100];int l1;int l2;int ans;void GetNex原创 2015-12-07 21:22:55 · 346 阅读 · 0 评论 -
24点算法
//24点算法,思想就是表达式树,4个数字,3个符号只能建成两种树一开始初始化a数组为4个数字,初始化b数组为符号,然后用两种树进行运算,如果符合输出即可但需要注意括号的位置,但表达式树处理括号也很方便,因为只要父节点的等级大于子节点,子节点的那个运算就要加括号#include int data[5];//存储一开始输入的4个数字 int b[5];//存储符号原创 2016-03-01 12:34:55 · 5510 阅读 · 0 评论 -
退火算法解决tsp问题
首先强烈推荐一篇博文http://www.cnblogs.com/heaad/archive/2010/12/20/1911614.html个人感觉退火算法明显比遗传算法理解简单,实现也更加方便.首先上公式:P(dE) = exp( dE/(kT) ) p(de)是指在当前的策略并不是那么优秀的情况下接受它的概率,所以de一定为负数,k是一个常数(本程序中取1),T为当前的温度原创 2016-03-01 20:20:00 · 2310 阅读 · 0 评论 -
codeforces #341(A,B)
//一开始脑残了,用高精度来写的,后来发现int64就可以#include int main() { __int64 sum; int i,m,n,min; scanf("%d",&n); sum=0; min=999999999; for (i=0;i<n;i++) { scanf原创 2016-02-02 20:02:27 · 344 阅读 · 0 评论 -
快速排序求第k小的数
快速排序求第k小的数,思想非常简单,就是如果要查找的k比当前下标low小,则只递归左部分,大则递归右部分,相等则递归右部分,当然由于数组下标从0开始,所以应该是k-1,(比如第一大的数数组下标为0),原理就是快速排序是以一个元素为分隔的,如果求第k大的元素,就是求第n-k+1小的元素.#include int i,j;void quicksort(int a[],int left,int原创 2016-02-24 10:56:45 · 6573 阅读 · 2 评论 -
连续邮资问题(回溯+动态规划)
这个程序debug了好长时间....一个晚上都耗上面了这个程序实际上每一部分并不复杂,但是动态规划那边边界错了好长时间。题目:假设国家发行了n种不同面值的邮票,并且规定每张信封上最多只允许贴m张邮票。连续邮资问题要求对于给定的n和m的值,给出邮票面值的最佳设计,在1张信封上可贴出从邮资1开始,增量为1的最大连续邮资区间。例如,当n=5和m=4时,面值为(1,3,11,15,32)的5种邮票原创 2016-02-25 22:07:45 · 12941 阅读 · 3 评论 -
遗传算法解决背包问题
//总体思想与之前的相似,评价函数就是物品的价值之和,但要注意一旦物品的重量大于背包的重量,那么该条染色体的幸存概率为0//基因就是每一个物品是否选择,这里默认有10条染色体在比较,并且每一条染色体上的第i个基因就是代表第i个物品是否选择//突变就是随机选择的染色体的随机位置由0变1,由1变0//另外建议把变异的概率调高点,否则有可能会陷入局部最优#include #includ原创 2016-02-29 23:10:28 · 7676 阅读 · 4 评论 -
最近点对问题(分治)
//课本上有一道有意思的练习题,给定n个点的横纵坐标,求它们的最近距离//若是直接暴力求取,复杂度为O(n^2),从n个点选出2个点,n*(n-1)/2嘛//而如果用分治法,复杂度可以降到O(nlogn),方法是先根据横纵坐标从小到大排序//然后寻找left~mid(点全部在左边),mid+1~right(点全部在右边)的最小点对,再将它们两个中的最小值和一个点在左边,一个点在右边的情原创 2016-03-24 19:51:00 · 1379 阅读 · 1 评论 -
水题
帮其他学校的写了两个大作业(c语言那种)第一个是个***管理系统大意就是公司工资管理系统,要计算一下汇率,没什么说的第二个是一个迷宫,难点在于随机生成迷宫那边,关键是深搜的过程是随机的就可以生成一条道路(这条道路都是可通行的),剩下的点大部分不可通行,当然也不能全不能让人走,否则这条道路就太明显了),想了个办法,如果是那条初始道路就直接铺路,否则很大概率是墙,小概率是道路。算法还可原创 2016-05-13 01:59:59 · 594 阅读 · 0 评论 -
fseek的坑(跨平台注意)
fseek的用处就是我在输出文件比如(json,xml)时,有一些不必要的空格,回车,逗号想要删除(比如直接考虑不输出比较困难,需要分情况讨论,这种时候还比如碰到了直接把这个符号退回去吃掉),但是注意在windows换行包括回车换行,而在liunx下直接是换行,也就是说在windows下退两个字符,在Linux下只要退一个,这个有点坑,如果含有fseek的程序不改直接从windows下移植到lin原创 2016-06-06 22:58:39 · 2276 阅读 · 0 评论 -
codeforces #334A,B
思路很简单,每一次取出最小的两堆合并,重复n-m次,可以使用优先权队列#include #include #include #include using namespace std;struct night{ int value; bool operator<(const night &k)const { return value>k.val原创 2015-12-02 01:55:54 · 576 阅读 · 0 评论 -
盖住关系的验证
先将n所有因子求出保存在a数组中,如果a[i]是a[j]的整数倍,那么如果j<k<i并且a[k]是a[j]整数倍,a[i]是a[k]的整数倍,那么这组a[i],a[j]就可以忽略。所谓有补格就是任意一个因子都能找到另一个因子使得他们最大公约数是1,最小公倍数是n即可。#include #include #include #include #include using namesp原创 2015-12-01 12:20:44 · 1660 阅读 · 0 评论 -
算法在追MM中的应用
算法在追MM中的应用动态规划如果你要追求一个MM,就要把这一问题分解开来,各个击破,才能最终赢得美人归,这叫动态规划(当然,有时间要求,一般数月解决)。记住,并非追求每个MM都能用这套方法解决,比如有些MM天生独立性强,不受其他人蛊惑。要使用这个方法有两个条件,第一,最优子结构(即如果子问题得到最优解决,那么追MM就解决了),第二,子问题重叠(即某些子问题不需要重复解决,只要解决一次就可以转载 2015-11-26 23:47:10 · 535 阅读 · 0 评论 -
一道简单的几何变换
Description小光最近在学习几何变换,老师给他留了一个作业,在二维平面上有n个点(x,y),老师给了m个几何变换对n个点进行操作,要求小光输出变换后的n个点的坐标(x’,y’)。小光为了偷懒,请求你帮他写个程序来完成老师的作业。 由于小光刚刚学习几何变换,老师只会给出四种变换,如下: 平移变换: (x’,y’)=(x+p,y’+q) 程序的输入格转载 2015-08-15 21:59:59 · 534 阅读 · 0 评论 -
链表,多项式求和
链表,多项式求和#include using namespace std;class Poly;class node{ private: int coef;//系数 int exp;//指数 node *next; friend Poly; friend void calc原创 2015-09-08 08:23:15 · 337 阅读 · 0 评论 -
多项式乘法
#include#include using namespace std; class SingleList; class node {private: int coef; int exp; node *next; friend SingleList; friend void operator+(const SingleList &A原创 2015-09-13 19:38:46 · 376 阅读 · 0 评论 -
矩阵转置(数据结构课本内容)
矩阵转置(课本内容)原创 2015-10-02 20:28:42 · 1324 阅读 · 0 评论 -
数据结构学习笔记
前记:我知道这些代码很简单,只是让我想起了去年大一的生活,虽然我玩了挺多的,但也确实看了不少书,不仅是技术方面的,也有文学方面(写了大约10篇左右的文章,还投了稿),经济方面的,所以我大二的生活还是相对轻松简单的,回想我过去的岁月,深深地感觉确实是一份耕耘一份收获,不管那些大牛智商有多高,哪怕你辈子也追不上那些大神,但只要你也走在追赶他们的道路上,蓦然回首,你会发现你其实已经收获了许多,况且人生也原创 2015-09-14 17:33:51 · 376 阅读 · 0 评论 -
树根据扩展先序遍历建立二叉树及其非递归遍历
此部分是对于数据结构的边缘部分的理解#include #include using namespace std; struct node { char data; node *leftchild; node *rightchild;};void Create(node *&p)//扩展先序遍历建立二叉树{ char ch; cin>>原创 2015-10-10 23:19:28 · 2441 阅读 · 0 评论 -
实验周作业~~QQ聊天记录的处理
QQ聊天记录的自动化处理原创 2015-11-12 12:10:12 · 702 阅读 · 0 评论 -
对于宽字符的初步运用
最近要用到宽字符,于是乎学习了两天关于宽字符方面的东西宽字符是双字节多语言字符代码,最简单来说中文一般就可以用宽字符来表示,因为一个中文占用两个字节,如果直接输出会导致乱码。我用的是codeblocks,可能会需要更改一下编码形式(如果依照本文代码发现会报错的话极有可能是编码问题)方法是:打开codeblocks-settings-compiler,在窗口下选择other option原创 2015-10-26 22:50:57 · 584 阅读 · 0 评论 -
AI
void DFS(Object s[18][18],int book[18][18],int visit[18][18],int x,int y){ int a[]={-1,-2,0,0,1,2,0,0};//左下右上,每一次都是先一步再两步,然后换方向 int b[]={0,0,-1,-2,0,0,1,2}; int i,j,ok; for (i=1;i<=7;原创 2015-12-13 13:01:03 · 282 阅读 · 0 评论 -
浙江大学研究生2005年上机题java实现
题目来源:http://ac.jobdu.com/oldexamset.php题目描述: 读入两个小于100的正整数A和B,计算A+B. 需要注意的是:A和B的每一位数字由对应的英文单词给出.输入: 测试输入包含若干测试用例,每个测试用例占一行,格式为"A + B =",相邻两字符串有一个空格间隔.当A和B同时为0时输入结束,相应的结果不要输出.原创 2017-02-14 21:20:05 · 702 阅读 · 0 评论