杂题
文章平均质量分 68
谢符宝
业精于勤,荒于嬉行成于思,毁于随。
展开
-
hdu4496 求连通分量个数
题意:题意可以转化为:不断给一个图加有边,问每次加边后图的连通分图有多少个。解法:裸的并查集,开始时n个点各自属于一个连通分量,每次加边都有可能将两个联通分量连起来,也有可能是在一个联通分量加了一条边,主要就是判断加边的两个点的根父母是否是同一个点,若是则两点属于同一个连通分量,否则就是两个联通分量,这时连通分量数就会减一。代码:#include #include #i原创 2014-01-23 02:58:56 · 703 阅读 · 0 评论 -
正则匹配
bool isMatch(string s,string format){ if(s.size()==0) { return format==""||format=="*"; } if(format.size()&&s=="") { return false; } if(s[0]==format[0]||fo原创 2016-01-11 17:52:41 · 451 阅读 · 0 评论 -
poj1655(树的重心)
题意: 求树的重心;重心定义:以此节点为根的最大子树节点个数最小。解法:dfs代码:/******************************************************* @author:xiefubao*******************************************************/#pragma commen原创 2014-11-27 10:30:13 · 659 阅读 · 0 评论 -
C++获取系统时间方法(毫秒级)
#include long getCurrentTime(){ struct timeval tv; gettimeofday(&tv,NULL); return tv.tv_sec * 1000 + tv.tv_usec / 1000;}原创 2014-06-03 01:42:59 · 2448 阅读 · 0 评论 -
Acdreamoj1115(数学思维题)
题意:1,3是完美数,如果a,b是完美数,则2+a*b+2*a+2*b,判断给出的n是否是完美数。解法:开始只看出来2+a*b+2*a+2*b=(a+2)*(b+2)-2,没推出更多结论,囧。没办法,只能暴力将所有的完美数求出来然后查表。正解是c+2=(a+2)*(b+2);完美数都是有质因子3或5组成的(5本身除外);自己暴力代码:/*******************原创 2014-06-13 00:17:41 · 941 阅读 · 0 评论 -
ural1147(Shaping Regions)矩形切割
题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1147题意:一个10000*10000的矩阵,初始颜色都为1,然后最多2500次涂色,每次涂色将一个矩形的面积涂成某个特定颜色,问涂完之后每种颜色最终的面积。解法:代码:/*********************************************原创 2014-06-28 20:06:33 · 757 阅读 · 0 评论 -
acdreamoj1108(The kth number)
题目链接:http://acdream.info/problem?pid=1108题意:n个数的数列,m次查询某个区间出现次数第k多的数出现的次数。n,m解法:这个因为是离线的所以可以先统一处理,然后再输出。可以维护一个left和right指针,pre,pre[i]表示此时区间内出现次数大于等于i的数的种类。为了减少复杂度,关键是left和right的移动方式,即查询区间如何排原创 2014-06-26 20:41:50 · 770 阅读 · 0 评论 -
堆排序的实现
排序的排序码是随机产生的100个整型。其中函数clearUp()用于将无序的排序码最大堆化。getOrder()用于交换元素时重建最大堆。堆排序的最坏时间复杂度为O(nlogn),属于不稳定排序。#include"iostream"#include"cstdlib"using namespace std;void swap1(int *p1,int *p2){ int a=*原创 2014-01-16 16:38:21 · 450 阅读 · 0 评论 -
CF (400C)
先贴代码,明天写题解;代码:/***************************************************** author:xiefubao*******************************************************/#pragma comment(linker, "/STACK:102400000,102400000")#原创 2014-03-06 01:39:08 · 607 阅读 · 0 评论 -
cf(cards)数学题
题意:有n个‘o’,m个‘x’可以任意地排成一排,每连续的a个‘o’,ans就加上a*a,每连读的b个‘x’,ans就减掉b*b,问ans最大可以为多少,并输出此时的一种排列方式;解法:根据数的性质可以知道,为使ans最大,应尽量是‘o’聚集在一起,'x'分隔开来。结果就是n个‘o’中分离出k个(k段的‘o’,和一段的‘oo...o’(长度n-k)),此时把m个‘x’尽量平均分成了k+原创 2014-03-02 13:42:22 · 637 阅读 · 0 评论 -
实现库函数next_permutation()
在输出给定排序码的所有排列时,C++函数库中next_permutation()的函数用起来非常方便。它的功能是找到当前排列按照字典序的下一个更大的排列。有的话,就直接修改为下一个更大的并返回true;如果当前就是最大排列,不作改动并返回false。利用这个函数,在输出所有排列时,只需先把原序列按照字典序从小到大排序,然后一个个找到下个更大排序,直至输出所有排列。 举个例子(其中,nex原创 2014-01-16 16:38:23 · 645 阅读 · 0 评论 -
西工大ACM校赛题解
由于本人英语水平有限,所以此次ACM校赛7道题目均为中文题面。以下是简要题解,供大家赛后参考。题目均为原创,测试数据大部分随机生成,个别组为人工设置用于卡一些边界的处理。每道题目在本人写了标程测试后都分别找了华电的雷神,上海大学的邝斌,安徽大学的程文章以及西电的石国勋等人验过。在我的程序和他们的程序跑的结果一样的情况下,将所处理数据定为最终的测试数据。标准程序和现场测试数据都已发到西工大ACM群中原创 2014-01-16 16:39:01 · 2679 阅读 · 0 评论 -
改进的归并排序算法
归并排序的思想在于divide and conquer。一般的归并排序的时间复杂度为O(nlogn)。由于需要一个附加的同样长度的辅助空间,所以它的空间复杂度为O(n)。在conquer时,笔者尝试将插入排序的思想应用于归并的过程中,从而将归并排序的空间复杂度优化至O(1)。下面是普通归并排序的实现:#include“iostream” using namespace std;原创 2014-01-16 16:38:25 · 2837 阅读 · 0 评论 -
poj1862(哈夫曼数)
#include #include #include #include using namespace std;priority_queueque;int main(){ int n; while(scanf("%d",&n)!=EOF) { for(inti=0;i { double a; scanf原创 2014-01-16 16:38:53 · 650 阅读 · 0 评论 -
uva10815 分离字符串
题意:将从文件中读入的所有字符,大写改为小写,去掉非字母字符,然后单词去重按字典序输出。解法:刚开始以为例如aa_bb是一个aabb单词,后来wa了几发发现要处理为两个单词。本来想重写的,后来突然发现可以在原代码上加个递归就可以处理这种情况了,感觉很舒畅,由于map本来就是按字典序排的,所以直接输出就好了。代码:#include #include #include #incl原创 2014-01-23 01:42:13 · 520 阅读 · 0 评论 -
计算轨迹相似度代码
// test1.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include #include #include #include #include #include #include #include #include #include #include原创 2016-10-18 21:24:55 · 9004 阅读 · 5 评论