
算法
文章平均质量分 62
maowenge
这个作者很懒,什么都没留下…
展开
-
并查集算法
食物链时间限制:1000 ms | 内存限制:65535 KB难度:5描述动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B, B吃C,C吃A。 现有N个动物,以1-N编号。每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种。 有人用两种说法对这N个动物所构成的食物链关系进行描述: 第一种说法是"1 X Y",表示X和原创 2015-05-19 17:28:30 · 434 阅读 · 0 评论 -
字符匹配
Given two strings A and B, whose alphabet consist only ‘0’ and ‘1’. Your task is only to tell how many times does A appear as a substring of B? For example, the text string B is ‘1001110110’ while the原创 2015-04-20 19:38:11 · 443 阅读 · 0 评论 -
寻找最大数
请在整数 n 中删除m个数字, 使得余下的数字按原次序组成的新数最大,比如当n=92081346718538,m=10时,则新的最大数是9888 输入第一行输入一个正整数T,表示有T组测试数据每组测试数据占一行,每行有两个数n,m(n可能是一个很大的整数,但其位数不超过100位,并且保证数据首位非0,m小于整数n的位数)输出每组测试数据的输出占一行,输出原创 2015-04-24 17:16:26 · 371 阅读 · 0 评论 -
过河问题
/*在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边。如果不借助手电筒的话,大家是无论如何也不敢过桥去的。不幸的是,N个人一共只带了一只手电筒,而桥窄得只够让两个人同时过。如果各自单独过桥的话,N人所需要的时间已知;而如果两人同时过桥,所需要的时间就是走得比较慢的那个人单独行动时所需的时间。问题是,如何设计一个方案,让这N人尽快过桥。 输入第一行是一个整原创 2015-04-24 15:53:16 · 412 阅读 · 0 评论 -
重建二叉树
描述题目很简单,给你一棵二叉树的后序和中序序列,求出它的前序序列(So easy!)。输入输入有多组数据(少于100组),以文件结尾结束。每组数据仅一行,包括两个字符串,中间用空格隔开,分别表示二叉树的后序和中序序列(字符串长度小于26,输入数据保证合法)。输出每组输出数据单独占一行,输出对应得先序序列。样例输入ACBFGED ABCDEFGCDAB CBAD原创 2015-04-24 10:59:46 · 309 阅读 · 0 评论 -
小猴子下落
有一颗二叉树,最大深度为D,且所有叶子的深度都相同。所有结点从左到右从上到下的编号为1,2,3,·····,2的D次方减1。在结点1处放一个小猴子,它会往下跑。每个内结点上都有一个开关,初始全部关闭,当每次有小猴子跑到一个开关上时,它的状态都会改变,当到达一个内结点时,如果开关关闭,小猴子往左走,否则往右走,直到走到叶子结点。一些小猴子从结点1处开始往下跑,最后一个小猴儿会跑到转载 2015-04-23 17:06:49 · 304 阅读 · 0 评论 -
整数划分
将正整数n表示成一系列正整数之和:n=n1+n2+…+nk, 其中n1≥n2≥…≥nk≥1,k≥1。 正整数n的这种表示称为正整数n的划分。求正整数n的不 同划分个数。 例如正整数6有如下11种不同的划分: 6; 5+1; 4+2,4+1+1; 3+3,3+2+1,3+1+1+1; 2+2+2,2+2+1+1,2+1+1+1+1; 1+1+1+1+1+1。原创 2015-04-23 16:31:11 · 379 阅读 · 0 评论 -
找球号一
/*在某一国度里流行着一种游戏。游戏规则为:在一堆球中,每个球上都有一个整数编号i(0号为k的球是否在这堆球中(存在为"YES",否则为"NO"),先答出者为胜。现在有一个人想玩玩这个游戏,但他又很懒。他希望你能帮助他取得胜利。输入第一行有两个整数m,n(0这个游戏进行n次。接下来输入m+n个整数,前m个分别表示这m个球的编号i,后n个分别表示每次游戏中的随机整数k原创 2015-04-23 15:52:54 · 549 阅读 · 0 评论 -
A-B问题
A+B问题早已经被大家所熟知了,是不是很无聊呢?现在大家来做一下A-B吧。现在有两个实数A和B,聪明的你,能不能判断出A-B的值是否等于0呢?输入有多组测试数据。每组数据包括两行,分别代表A和B。它们的位数小于100,且每个数字前中可能包含+,- 号。每个数字前面和后面都可能有多余的0。每组测试数据后有一空行。输出对于每组数据,输出一行。如果A-B=转载 2015-04-23 16:49:23 · 628 阅读 · 0 评论 -
整数划分
把一个正整数m分成n个正整数的和,有多少种分法?例:把5分成3个正正数的和,有两种分法:1 1 31 2 2输入第一行是一个整数T表示共有T组测试数据(T每组测试数据都是两个正整数m,n,其中(1输出输出拆分的方法的数目。#include#includeusing namespace std原创 2015-04-22 16:40:58 · 668 阅读 · 0 评论 -
排第几个
现在有"abcdefghijkl”12个字符,将其按字典序排列,如果给出任意一种排列,我们能说出这个排列在所有的排列中是第几小的。但是现在我们给出它是第几小,需要你求出它所代表的序列.输入第一行有一个整数n(0随后有n行,每行是一个整数m,它代表着序列的第几小;输出输出一个序列,占一行,代表着第m小的序列。//输入倒数第几个数 写出字典序(原创 2015-04-23 14:59:44 · 490 阅读 · 0 评论 -
汉诺塔
现在假设规定要把所有的金片移动到第三个针上,给你任意一种处于合法状态的汉诺塔,你能计算出从当前状态移动到目标状态所需要的最少步数吗?输入第一行输入一个整数N,表示测试数据的组数(0每组测试数据的第一行是一个整数m表示汉诺塔的层数(0输出输出从当前状态所所有的金片都移动到编号为3的针上所需要的最少总数#include#includeusing原创 2015-04-20 15:55:13 · 694 阅读 · 0 评论 -
汉诺塔题
现在我们把三根针编号为1,2,3。所有的金片在初始时都在1号针上,现在给你的任务是判断一系列的指令过程中,是否会出现非法的指令。而非法指令有以下两种情况:1、某个针上已经没有金片了,但是指令依然要求从该处移动金片到其它针上。2、把一个大的金片移动到了小的金片上。输入第一行输入一个整数N表示测试数据的组数(N每组测试数据的第一行有两个整数P,Q原创 2015-04-20 16:52:19 · 674 阅读 · 0 评论 -
奇偶冒泡排序的CUDA实现
由于奇偶冒泡排序分奇下标和偶下标排序,这就确保了在一轮排序【奇/偶】过程中,隔一个处理一个,同一轮的排序中被处理的各元素是互不影响的,所以可以并行处理。。。事实上,奇偶冒泡排序在串行CPU上本没一点优势,他揍是为并行而生.[cpp] view plaincopy#include #include #include转载 2015-04-28 17:34:13 · 1300 阅读 · 0 评论 -
最小公倍数
先对0-100预处理或者运用最小公倍数就是所有质数的相应幂的积比如N=10小于10的质数有2,3,5,7对应的最大幂是:3,2,1,1则最小公倍数是:2^3x3^2x5^1x7^1 = 2520 #include #include #include const int M = 120;bool not_prime[M];int prime[30]原创 2015-04-28 19:19:10 · 537 阅读 · 0 评论 -
苹果
苹果时间限制:3000 ms | 内存限制:65535 KB难度:3描述ctest有n个苹果,要将它放入容量为v的背包。给出第i个苹果的大小和价钱,求出能放入背包的苹果的总价钱最大值。输入有多组测试数据,每组测试数据第一行为2个正整数,分别代表苹果的个数n和背包的容量v,n、v同时为0时结束测试,此时不输出。接下来的n行,每行2个转载 2015-04-27 16:02:44 · 276 阅读 · 0 评论 -
大整数的求余数
现在给你一个自然数n,它的位数小于等于一百万,现在你要做的就是求出这个数除10003之后的余数输入第一行有一个整数m(1随后m行每行有一个自然数n。输出输出n整除10003之后的余数,每次输出占一行。#include#include#include#includeusing namespace std;int main()原创 2015-04-21 17:11:33 · 3309 阅读 · 0 评论 -
背包问题
现在有很多物品(它们是可以分割的),我们知道它们每个物品的单位重量的价值v和重量w(1<=v,w<=10);如果给你一个背包它能容纳的重量为m(10<=m<=20),你所要做的就是把物品装到背包里,使背包里的物品的价值总和最大。输入第一行输入一个正整数n(1随后有n测试数据,每组测试数据的第一行有两个正整数s,m(1输出输出每组测试数据中背包内的物品的价值和,每次输原创 2015-04-21 11:35:55 · 441 阅读 · 0 评论 -
次方求模
求a的b次方对c取余的值 输入第一行输入一个整数n表示测试数据的组数(n每组测试只有一行,其中有三个正整数a,b,c(1=输出输出a的b次方对c取余之后的结果#include using namespace std;long long powermod(long long a, long long b, long long原创 2015-04-21 15:43:43 · 565 阅读 · 0 评论 -
九的余数
现在给你一个自然数n,它的位数小于等于一百万,现在你要做的就是求出这个数整除九之后的余数。输入第一行有一个整数m(1随后m行每行有一个自然数n。输出输出n整除九之后的余数,每次输出占一行。#include#includeusing namespace std;int a[1000000];int main(){in原创 2015-04-21 10:53:07 · 521 阅读 · 0 评论 -
众数问题
所谓众数,就是对于给定的含有N个元素的多重集合,每个元素在S中出现次数最多的成为该元素的重数,多重集合S重的重数最大的元素成为众数。例如:S={1,2,2,2,3,5},则多重集S的众数是2,其重数为3。现在你的任务是:对于给定的由m个自然数组成的多重集S,计算出S的众数及其重数。输入第一行为n,表示测试数据组数。(n每组测试的第一行是一个整数m,表示多重集原创 2015-04-21 09:34:47 · 871 阅读 · 0 评论 -
p次方求和
/*一个很简单的问题,求1^p+2^p+3^p+……+n^p的和。输入第一行单独一个数字t表示测试数据组数。接下来会有t行数字,每行包括两个数字n,p,输入保证0输出输出1^p+2^p+3^p+……+n^p对10003取余的结果,每个结果单独占一行。*/#include#include#includeusing namespace std;原创 2015-04-24 21:37:10 · 1049 阅读 · 0 评论 -
最大公约数
/*编写程序,输入两个正整数x和y,求它们的最大公约数。输入有多组测试数据,以EOF结束。每组测试数据有2个整数x、y。输出每组数据输出一行。*/#include#include using namespace std;int main(){int x, y;int r;while (scanf_s("%d,%d",&x,原创 2015-04-24 21:00:09 · 498 阅读 · 0 评论 -
喷水装置
现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为Ri的喷水装置,每个喷水装置的效果都会让以它为中心的半径为实数Ri(0<Ri<15)的圆被湿润,这有充足的喷水装置i(1<i<600)个,并且一定能把草坪全部湿润,你要做的是:选择尽量少的喷水装置,把整个草坪的全部湿润。输入第一行m表示有m组测试数据每一组测试数据的第一行有一个整数数n,n表示共有n个喷水装置,随后原创 2015-04-20 20:55:43 · 367 阅读 · 0 评论 -
阶乘因式分解
给定两个数n,m,其中m是一个素数。将n(0注:^为求幂符号。 输入第一行是一个整数s(0随后的s行, 每行有两个整数n,m。 输出输出m的个数#includeusing namespace std;int main(){int s;int n, m;cin >> s;while原创 2015-04-22 22:59:39 · 372 阅读 · 0 评论 -
星际之门1
公元3000年,子虚帝国统领着N个星系,原先它们是靠近光束飞船来进行旅行的,近来,X博士发明了星际之门,它利用虫洞技术,一条虫洞可以连通任意的两个星系,使人们不必再待待便可立刻到达目的地。帝国皇帝认为这种发明很给力,决定用星际之门把自己统治的各个星系连结在一起。可以证明,修建N-1条虫洞就可以把这N个星系连结起来。现在,问题来了,皇帝想知道有多少种修建方案可以把这N个星系用原创 2015-04-22 22:31:48 · 345 阅读 · 0 评论 -
三点的顺序
现在给你不共线的三个点A,B,C的坐标,它们一定能组成一个三角形,现在让你判断A,B,C是顺时针给出的还是逆时针给出的?如:图1:顺时针给出图2:逆时针给出 输入每行是一组测试数据,有6个整数x1,y1,x2,y2,x3,y3分别表示A,B,C三个点的横纵坐标。(坐标值都原创 2015-04-22 15:47:52 · 446 阅读 · 0 评论 -
冒泡排序
#include#includeusing namespace std;const int N=10000;int main(){int a[N];time_t start,stop,elapsed;srand(time(NULL));for(int i=0;i{a[i]=rand();//cout}coutstart=clock原创 2014-10-09 15:29:58 · 341 阅读 · 0 评论 -
螺旋数组
#includeusing namespace std;const int N=20;int main(void){int a[N][N]={0};coutint d,t=1,k=0,flag=0;cin>>d;int i=0,j=0;while(k{while(j{a[i][j]=t;j++;t++;k++;}j--;//因为j超出原创 2014-10-01 00:00:19 · 404 阅读 · 0 评论 -
//优先队列的插入与删除操作
//优先队列的插入与删除操作#includeusing namespace std;const int maxsize=100;int a[maxsize];void siftup(int v,int n){if(n>=maxsize){coutreturn;}a[++n]=v;for(int i=n;(i>1)&&(a[i/2]原创 2014-09-29 15:32:44 · 2649 阅读 · 1 评论 -
蛇形数组
//************蛇形数组#include "stdio.h"int main(){ int a[100][100]={0}; int i,j,k=1,n,t=1,m; //t为转向的标记 printf("input \n"); scanf("%d",&m); //上图所示m的值为9 for(i=1;i { for(j=1;j转载 2014-09-29 16:17:34 · 447 阅读 · 0 评论 -
单链表的创建,删除,插入,排序
///******* 创建单链表#includeusing namespace std;struct student{int data;student *next;};student *create(int n)//创建链表{student *head,*p,*s;int x;//要输入的data;int i=0;//计数head原创 2014-10-23 11:44:04 · 515 阅读 · 0 评论 -
用链表实现队列的操作
////****用链表实现队列的操作#includeusing namespace std;struct student{char name[20];student *next;};struct paiduiqu//每个排队区有多少学生进入走出{int data;paiduiqu *next;//下一个排队区student原创 2014-10-23 21:04:51 · 606 阅读 · 0 评论 -
约瑟夫循环链表
//// 约瑟夫循环链表#includeusing namespace std;struct Node{int data;Node *link;};void josephus(int n,int k,int m)//n个人,第k个开始计数,计到m就出列{Node *list;//把它设为头结点list=(Node*)malloc(si原创 2014-10-23 16:29:36 · 439 阅读 · 0 评论 -
用链表来现实栈的操作
////*****实现用链表来现实栈的操作#includeusing namespace std;struct student{char name[20];student *next;};struct zhan{int num;zhan *next;student *top,*bottle;};zhan*原创 2014-10-24 09:34:35 · 422 阅读 · 0 评论 -
两个栈实现队列的功能
////**********两个栈实现队列的功能其实就是用一个类包含两个栈,其中一个#include#includeusing namespace std;class myqueue{public:void push(int t){s1.push(t);}int front(){if(s2.empty())原创 2014-10-24 10:47:50 · 355 阅读 · 0 评论 -
mutable的用法
#include#includeusing namespace std;class C{public:C(int i):m_Count(i){}int incr() const {return ++m_Count;}int dcer() const{return --m_Count;}private://int m_Count原创 2014-10-06 23:09:59 · 372 阅读 · 0 评论 -
两个大数的相乘
这里还有很多bug,只能够将每个数字一个一个输入,原创 2014-10-06 16:04:31 · 444 阅读 · 0 评论 -
链表的插入排序
#include#includeusing namespace std;const int N=100;typedef struct Node{int data;struct Node *next;}*LinkList;void CreateList(LinkList &L,int n){LinkList p;原创 2014-10-09 18:34:11 · 312 阅读 · 0 评论 -
蛇形数组的另一种实现
#includeusing namespace std;const int N=9;int main(void){int a[N][N];int s;int f;int square=N*N;//共这么多元素for(int i=0;i{for(int j=0;j{s=i+j;//第几个斜排if(s{a[i][j]=s*转载 2014-10-13 21:52:02 · 282 阅读 · 0 评论