随笔分类 - C 程序
摘要:题意为恐怖分子要炸理工,但是要把炸弹连接起来,那样才放便作案。问怎么样才能用最短的线把炸弹都连接起来。用到最小生成树的算法。prim 算法:任意找一点A为树,以这个点为起点找离它最近的点的距离设为点B,再把B加入树,以(A,B)为整体,找离她们两个最近的距离设为点C ,把C也加入到树中。依次类推。Kruskal 算法:先对所有距离从小到大排列,由小到大依次找,如果前面的距离是当前距离的一个集合(也就是当前的距离是否包括前面多了距离),不包括了加入到距离中,否则不加; 1 /*#include<stdio.h>//kruskal算法实现 2 #include<stdlib.h&
阅读全文
摘要:用二分法进行分配。假设 mid 就为所求的最小时间。修路Time Limit: 1000 MSMemory Limit: 65536 KTotal Submit: 72(28 users)Total Accepted: 37(25 users)Special Judge:NoDescription前段时间,某省发生干旱,B山区的居民缺乏生活用水,现在需要从A城市修一条通往B山区的路。假设有A城市通往B山区的路由m条连续的路段组成,现在将这m条路段承包给n个工程队(n≤m≤ 300)。为了修路的便利,每个工程队只能分配到连续的若干条路段(当然也可能只分配到一条路段或未分配到路段)。假设每个工程队
阅读全文
摘要:用栈将不能匹配的存起来:括号匹配Time Limit: 1000 MSMemory Limit: 65536 KTotal Submit: 84(39 users)Total Accepted: 51(38 users)Special Judge:NoDescriptionLeyni得到了一个由"("和")"组成的字符串,比如"(())()","()","(()(()))"是括号匹配的,而")(","(()","(()))("是括号不匹
阅读全文
摘要:建立二叉排列树,让后中序遍历;Memory Limit: 65536 KTotal Submit: 187(37 users)Total Accepted: 90(35 users)Special Judge:NoDescription用计算机随机生成了N个0到1000000000(包含0和1000000000)之间的随机整数(N≤5000000),对于其中重复的数字,只保留一个,把其余相同的数去掉。然后再把这些数从小到大排序。请你完成“去重”与“排序”的工作Input输入有2行,第1行为1个正整数,表示所生成的随机数的个数:N第2行有N个用空格隔开的正整数,为所产生的随机数。Output输出
阅读全文
摘要:找出递推公式为an=an-1+an-2+an-3;用到的是快速幂与矩阵乘法。快速幂:求a的b次方时可直接用:int res=1;while(b){if(b&1)//判断b是否为奇数;res=a*res;a=a*a;b/=2;}return res;Final Destination IITime Limit: 1000 MSMemory Limit: 65536 KTotal Submit: 103(26 users)Total Accepted: 27(19 users)Special Judge:NoDescriptionJiaoZhu likes going on adventu
阅读全文
摘要:深度优先搜索及计划搜索: 下山Time Limit: 1000 MSMemory Limit: 65536 KTotal Submit: 74(33 users)Total Accepted: 45(33 users)Special Judge:NoDescription下面的矩阵可以想象成鸟瞰一座山,矩阵内的数据可以想象成山的高度。可以从任意一点开始下山。每一步的都可以朝“上下左右”4个方向行走,前提是下一步所在的点比当前所在点的数值小。例如处在18这个点上,可以向上、向左移动,而不能向右、向下移动。 1 2 3 4 516...
阅读全文
摘要:1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 #define MAX 100010 5 typedef struct{ 6 char s[10]; 7 int num; 8 }Number; 9 Number phone[MAX];10 int cmp(const void *p1,const void *p2)11 {12 return strcmp((*(Number*)p1).s,(*(Number*)p2).s);13 }14 int main()15 {16 int
阅读全文
摘要:Description在平面坐标系内,有两个坐标轴x轴和y轴。(x,y)表示点的坐标。有一点处于(x1,y1)位置上,他可以向相临8个位置移动(移动方式见下图)。划定范围:此点只可以在[0<=x<=300,0<=y<=300]范围内移动。要求:给出起始位置(x1,y1)和目标位置(x2,y2),要求同学求出从起始位置移动到目标位置所需的最少次数。Input输入包括多组测试用例。对于每组测试用例,包含4个正整数,x1,y1,x2,y2,范围均为[0,300]。Output输出移动所需的最少次数。Sample Input0 0 1 20 0 2 1Sample Output
阅读全文
摘要:转换一下思路,求的是走到step[n][n]的最小值,可以转换成到每个step[i][j]的最小值,进而转换成step[i][j-1]与step[i-1][j]比较大小。 1 #include<stdio.h> 2 int a[1001][1001]; 3 int main() 4 { 5 int n,i,j; 6 while(scanf("%d",&n)!=EOF) 7 { 8 for(i=1;i<=n;i++) 9 for(j=1;j<=n;j++)10 scanf("%d",&a[i][j]);11 ...
阅读全文
摘要:主要是灵活的运用学过的知识,然后找出数学规律就行。Description传说菱形具有魔法,而它越大,代表它具有的法力也越大,现在给你一个菱形的法力值,求你输出它的形状。如法力值为5时的菱形如下: ************ *Input输入有多组测试数据,每组为一个整数n(n = 0或3 <= n <= 29,且n为奇数)代表一个菱形所具有的法力值,n为0时代表输入结束,该行不做处理。Output对于每组测试数据,输出该法力值的菱形,用’*’字符代表菱形的身体,法力值实际上就是菱形对角线上’*’的个数,详细情况请看样例。Sample Input350Sample Output****
阅读全文
摘要:题目可以通过循环来简化,求周期。h=k%n,h就是将后面的h个字符移动到前面来,同时将前面(n-h)个字符平移到后面。我已经碰到很多通过周期思想来解题的题。可见这个点还是很重要的。而且还特别简单。但更重要的是学以致用,在做题的时候会用才重要。Input一个木马排列顺序,由一串字符串表示,长度不大于100000;第一行是一行字符串,第二行是反向旋转K次0 <= K <= 1000000000Output输出反向旋转K次之后的排列顺序Sample Inputabcd12341abcd12342Sample Output4abcd12334abcd12 1 #include<std
阅读全文
摘要:1 #include<stdio.h> 2 #include<string.h> 3 #define MAX 1020 4 int num,max,n,m; 5 int map[MAX][MAX],saw[MAX][MAX]; 6 int dir[4][2]={0,1,-1,0,1,0,0,-1}; 7 void mappond(int p1,int p2) 8 { 9 int k,x,y;10 for(k=0;k<4;k++)11 {12 x=p1+dir[k][0];13 y=p2+dir[k][1];14 if(x...
阅读全文
摘要:对每个数进行标记,然后判断是否出现奇数次。Description给出N个数(保证N为偶数),其中有且只有两个不同的数字出现了奇数次。请你找出他们来。Input对于每组测试数据:第一行,给出数字N,表示下一行输入N个数字,其中N为偶数(2<=N<=100000)第二行,有N个数字(每个数字保证可以使用INT表示)处理到文件结束Output对于每组测试数据:第一行,输出找到的两个数字,由小到大。Sample Input41 2 3 3Sample Output1 2 1 #include<stdio.h> 2 #include<map> 3 #define MA
阅读全文
摘要:Description入侵检测(Intrusion Detection)是对入侵行为的检测。它通过收集和分析网络行为、安全日志、审计数据、其它网络上可以获得的信息以及计算机系统中若干关键点的信息,检查网络或系统中是否存在违反安全策略的行为和被攻击的迹象。入侵检测作为一种积极主动地安全防护技术,提供了对内部攻击、外部攻击和误操作的实时保护,在网络系统受到危害之前拦截和响应入侵。因此被认为是防火墙之后的第二道安全闸门,在不影响网络性能的情况下能对网络进行监测。入侵检测通过执行以下任务来实现:监视、分析用户及系统活动;系统构造和弱点的审计;识别反映已知进攻的活动模式并向相关人士报警;异常行为模式的统
阅读全文
摘要:(a+b+c+···+)%n=(a%n+b%n+···)%n.Total Submit: 130(43 users)Total Accepted: 47(38 users)Special Judge:NoDescription菲波那契数大家可能都已经很熟悉了:f(1)=0 f(2)=1 f(n)=f(n-1)+f(n-2) n>2 因此,当需要其除以某个数的余数时,不妨加一些处理就可以得到。Input输入数据为一些整数对P、K,P(1<P<5000)表示菲波那契数的序号,K(1<=K<15)表示2的幂次方
阅读全文
摘要:这个题应该没什么难度。如果有也应该是那个判断子串的check_word()函数。int check_word(char s2[55],char s[200]){ int i,j,m=-1; int t=0; int n1=strlen(s2); int n2=strlen(s); for(i=0;i<n1;i++) { for(j=m+1;j<n2;j++) if(s2[i]==s[j]) {m=j;t++;break;} } if(t==n1) return 1; return 0;}好好体会,再多练习练习吧。 1 #include<stdio.h> 2 #inclu
阅读全文
摘要:1 #include<stdio.h> 2 #include<map>//利用map函数。 3 #include<string> 4 #include<stdlib.h>//快排头文件。 5 #define MAX 10100 6 using namespace std; 7 int cmp(const void*p1,const void*p2) 8 { 9 return *(int*)p1>*(int*)p2;10 }11 int main()12 {13 map<char,int>v;//存相同字符的个数14 map<
阅读全文
摘要:要求:给出x1,y1,x2,y2,x3,y3,x4,y4;有三种情况,(1)相交(2)平行(3)共线。有交点了求出DescriptionProfessor Leyni likes to help LOLIs with their math.This time, Leyni meets several LOLIs in the classroom and gets several problems about "Intersecting Lines".The LOLIs want to know how and where two lines intersect.Leyni
阅读全文
摘要:字符串输入一般是首先建立一个数组,然后有几种选择。(1)用scanf,但scanf遇到空格就停了,不能读出全部的字符,这是一个缺陷。(2)用gets();但需要用getchar()读掉'\n',而且由于gets()可以不停的往里塞东西,所以已被废除。但一般的还可以用,建议最好不用。对以后的学习不太好。(3fgets();这才是我们要说的。但我就不说了,自己看下面的代码吧。自己好好体会。1 #include<stdio.h>//这里给出最简单的。2 int main()3 {4 char a[111];5 fgets(a,111,stdin);6 printf(&qu
阅读全文
摘要:1 #include<stdio.h> 2 #define MAX 100000000 3 int a[MAX]; 4 int main() 5 { 6 int t,n; 7 int num=3; 8 a[0]=1;a[1]=2;a[2]=4; 9 while(1)10 {11 a[num]=(a[num-1]+a[num-2]+1)%10007;12 if(a[num]==a[2]&&a[num-1]==a[1]&&a[num-2]==a[0])13 break;14 num++...
阅读全文

浙公网安备 33010602011771号