上一页 1 ··· 5 6 7 8 9 10 下一页
摘要: 士兵站队问题 Time limit: 1000MS Memory limit: 32768K Total Submit: 154 Accepted: 76 问题描述:在一个划分成网格的操场上,n个士兵散乱地站在网格点上。网格点由整数坐标(x,y)表示。士兵们可以沿网格边上、下、左、右移动一步,但在同一时刻任一网格点上只能有一名士兵。按照军官的命令,士兵们要整齐地列成一个水平队列,即排列成(x,y),(x+1,y),…,(x+n-1,y)。如何选择x 和y的值才能使士兵们以最少的总移动步数排成一列。算法设计:计算使所有士兵排成一行需要的最少移动步数。数据输入:输入士兵数n,1<=n< 阅读全文
posted @ 2010-04-12 12:26 SubmarineX 阅读(970) 评论(0) 推荐(0) 编辑
摘要: 这是O(n^2)的算法:#include<stdio.h>int main(){ int n,i,k,max,lis[1001],num[1001]; while(scanf("%d",&n)!=EOF) { for(i=0;i<n;i++) { scanf("%d",&num[i]); lis[i]=1; } for(i=1;i<n;i++) for(k=0;k<i;k++) if(num[k]<=num[i]&&lis[i]<lis[k]+1) //当前数比之前数大&& 阅读全文
posted @ 2010-04-07 13:16 SubmarineX 阅读(468) 评论(0) 推荐(0) 编辑
摘要: SumsetsTime Limit: 2000MSMemory Limit: 200000KTotal Submissions: 6980Accepted: 2763DescriptionFarmer John commanded his cows to search for different sets of numbers that sum to a given number. The cows use only numbers that are an integer power of 2. Here are the possible sets of numbers that sum to 阅读全文
posted @ 2010-04-06 22:24 SubmarineX 阅读(524) 评论(0) 推荐(0) 编辑
摘要: 转自:http://hi.baidu.com/acm_ee/blog/item/cd2d382dd73ea734349bf7ed.htmlPOJ各题算法分类动态规划:1037 A decorative fence、1050 To the Max、1088 滑雪、1125 Stockbroker Grapevine、1141 Brackets Sequence、1159 Palindrome、1160 Post Office、1163 The Triangle、1458 Common Subsequence、1579 Function Run Fun、1887 Testing the CATCH 阅读全文
posted @ 2010-04-06 19:22 SubmarineX 阅读(332) 评论(0) 推荐(0) 编辑
摘要: 题目理解错误:第一行: 形式是:s1<s2>s3<s4>s5,只切分成5段,si可能为空或空格;第二行输出形式: ***s4s3s2s5;就这么简单,还以为要区分单词的,做得很复杂。 阅读全文
posted @ 2010-04-01 14:19 SubmarineX 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 思路:用qsort对字符串数组进行排序,由于父串与子串相邻,则只要比较相邻串是否符合就行了(通过比较相邻字符串长度,选择长度小的作为判断长度)这次掌握了对字符串数组的快排;不过还有人用trie树来做的,目前还不会。用到的部分代码:qsort(num,n,sizeof(num[0]),cmp);for(i=0;i<n;i++) len[i]=strlen(num[i]);for(i=0;i<n-1;i++){ length=len[i]<len[i+1]?len[i]:len[i+1]; ok=0; for(k=0;k<length;k++) if(num[i][k]!= 阅读全文
posted @ 2010-03-31 21:22 SubmarineX 阅读(275) 评论(0) 推荐(0) 编辑
摘要: 显然是位操作题做得有点没效率考虑三种情况:从低位读起,第一个读到的1后是0(例*0010*,则处理后为*0100*)从低位读起,读到一串1,分两种情况,a。最低位为1(例*0111,处理后为*1011);b。最低位为0(例*001110,处理后为*010011)#include<stdio.h>#include<string.h>int main(){ int i,t; long n,temp,bite[25],num[25]={0,1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,13 阅读全文
posted @ 2010-03-27 22:43 SubmarineX 阅读(252) 评论(0) 推荐(0) 编辑
摘要: 起先还以为照着题目写下递归就好了,可是运行到50 50 50时,怎么也出不了答案,寒,原来要用记忆化搜索,这样可以省去重复操作。#include<stdio.h>long num[21][21][21]={0};long w(int a,int b,int c){ if(a<=0 || b<=0 || c<=0) return 1; if(a>20 || b>20 || c>20) return w(20,20,20); if(num[a][b][c]) return num[a][b][c]; if(a<b && b< 阅读全文
posted @ 2010-03-24 20:39 SubmarineX 阅读(247) 评论(0) 推荐(0) 编辑
摘要: 给你二个整数p和a,其中p是质数。求ap除以p后的余数。输入: 每一行包含a和p,p=0时结束输入,最后一行输入不处理。输出: 每一行输出所求的值。例子:In: 2 22 31 0Out:02Hint: 1 0时,因为p = 0, 结束输入。Source:WT用到费马小定理。若p为质数,则ap% p =a% p,a<0时,ap% p =a% p +p,(若(-a)%p==0),则ap% p = 0 )#include<stdio.h>int main(){int a,p;while(scanf("%d%d",&a,&p)!=EOF,p)a& 阅读全文
posted @ 2010-03-14 14:06 SubmarineX 阅读(223) 评论(0) 推荐(0) 编辑
摘要: 终于做出来了,不禁长舒一口气。历时+-8小时,倍感压力巨大。接下来说说我的心得吧:这题用到的是组合的知识;处理第一位字母时,需要计算之前的字母排序数,第一位有其特殊之处:如:bcd,处理b位时,前面有 口??,和a??两种情况,我们只要处理2次就可以了;处理末位时,只要计算(当前位字母-前一位字母)即可;处理首末之间位置时,就要考虑两种情况:比如bexy,处理e位时,1.口??,这一种对于每一位计算都需要;2. c??、d??,而这一种,就要看前一位和当前位了,之间有几个字母,就有几个排序。对于排序,这样计算Cmn(该符号为组合数表示),n是 26-当前位字母序数(在字母表中的序数),m是 l 阅读全文
posted @ 2010-03-11 19:35 SubmarineX 阅读(170) 评论(0) 推荐(0) 编辑
摘要: 题目:一共有10位数,当且只有最后一位若等于10的话,用X表示(当然输入输出都需要考虑 是否是 ‘X’)For example 0201103311 is a valid ISBN, since 10*0 + 9*2 + 8*0 + 7*1 + 6*1 + 5*0 + 4*3 + 3*3 + 2*1 + 1*1 = 55. 找出带‘?’的那位上的数值,并输出,若不能找到,则输出‘-1’。如果还是WA的花,不妨测下下面的测试数据(很强悍的):156881111X?56881111X 1?6881111X 15?881111X 156?81111X 1568?1111X 15688?111X 15 阅读全文
posted @ 2010-03-09 19:43 SubmarineX 阅读(413) 评论(0) 推荐(0) 编辑
摘要: 骑车去学校,题目意思:从A地开始,当刚到A地时,如果有车就跟着出发,不然就等车来,再跟着。如果途中有比当前行驶速度大的车,就跟着那辆。求到B的时间。思路:如果Ti为负,则说明,在主人公到A地前|Ti|s已经经过A地,如果能被主人公赶上,则 i 的速度不及主人公的速度,还有一种情况是主人公一直都没追上。所以这种数据可以忽略。接下来就是Ti>=0的了,我们可以这样想:如果如果主人公刚开始搭a车.b车.c.d.,最后搭上的那辆车肯定是该车全程用时最少的,那我们就可以做了,全程时间=全程距离/速度+Ti;比较一下,谁用时最少就可以了。 阅读全文
posted @ 2010-03-09 16:38 SubmarineX 阅读(307) 评论(0) 推荐(0) 编辑
摘要: 自己画图,根据m和n的奇偶性来做:至少有一个为even,则((m-1)+(n-1))*2+(m-2)*(n-2),即m*n。若都为odd,则((m-1)+(n-1))*2+(m-3)*(n-2)+(n-3)+sqrt(2),即m*n-1+sqrt(2),简写成m*n+0.41。 阅读全文
posted @ 2010-03-07 14:41 SubmarineX 阅读(250) 评论(0) 推荐(0) 编辑
摘要: 对int数组排序: #include #include int cmp(const void *a, const void *b) //int 是作为返回值类型,返回值为真或假,故用int(包括数据double时) { return(*(int *)a-*(int *)b); //如果是double型数组,则int改为double就可以了 } int... 阅读全文
posted @ 2010-03-03 17:56 SubmarineX 阅读(265) 评论(0) 推荐(0) 编辑
摘要: 注意这句话:OutputFor each test case, print the grade on a separate line (without unnecessary decimal points and/or zeros.)小数部分为0,则不用小数点,小数部分的后导0舍去。所以用%g可以达到这个目的。格式字符:g,G选用%g或%G格式中输出宽度较短的一种格式,不输出无意义的0.用G时,若以指数形式输出,则指数以大写表示。 阅读全文
posted @ 2010-03-02 20:27 SubmarineX 阅读(436) 评论(0) 推荐(0) 编辑
摘要: 思想是这样的:比如求100,000以内素数个数,定义一个bool型变量(c里不能定义bool型),bool prime[100001](长度比10,000大1);当i%2==1时,prime[i]=true;否则,prime[i]=false;i=3,j=2*i,对下标为3的倍数的prime[j]赋false;i自增,重复第3步;total=0;if(prime[i]) total++。[代码] 阅读全文
posted @ 2010-03-02 19:30 SubmarineX 阅读(176) 评论(0) 推荐(0) 编辑
摘要: 求和公式:(i+(i+m-1))*m=2*n,即:(2*i+m-1)*m=2*n,i为首项,m为项数,n为测试数。由公式可以分析出:2*n%m==0;(2*n/m+1-m)%2==0;∵2*i+m-1>m,∴m2<2*n。根据以上几点,就可以编了。 阅读全文
posted @ 2010-03-01 12:53 SubmarineX 阅读(197) 评论(0) 推荐(0) 编辑
摘要: 说实在的,没有公式,那我真就下不了手了。。。《计算机程序设计艺术》给出的公式n!=sqrt(2*pi*n)*((n/e)^n)*(1+1/(12*n)+1/(288*n*n)+O(1/n^3)); #include<stdio.h>#include<math.h>int main(){ int t,i; long n; const double pi=3.141592653589; const double e=2.718281828459; while(scanf("%d",&t)!=EOF) for(i=1;i<=t;i++) { 阅读全文
posted @ 2010-02-27 22:34 SubmarineX 阅读(332) 评论(0) 推荐(0) 编辑
摘要: http://acm.pku.edu.cn/JudgeOnline/problem?id=1163这是我第一次用动态规划来做题。很不熟练啊。从下往上依次考察(i,j)下面的较大数,并储存起来。[代码]再次写这个代码:[代码] 阅读全文
posted @ 2010-02-27 10:51 SubmarineX 阅读(247) 评论(0) 推荐(0) 编辑
摘要: 思路按照2+3+4+...求和for(i=2;n-sum>i;i++) /*利用循环并判断n-m是否<或=i*/ sum+=i; printf("%d",2); /*= ,则利用循环打出*/ for(t=3;t<=i;t++) printf(" %d",t); t=n-sum; /*余几*/ /*< ,则利用循环分部打出*/ s=i-2; /*数列个数*/ k=t/s; /*平均每个数加几*/ /*若剩余大于个数,则每个数加k*/ y=t%s; /*还剩几*/ /*剩余的从大到小依次加一*/ printf("%d&quo 阅读全文
posted @ 2010-02-26 20:22 SubmarineX 阅读(299) 评论(0) 推荐(0) 编辑
上一页 1 ··· 5 6 7 8 9 10 下一页