随笔分类 -  OJ

摘要:运动会 Time limit: 1000MS Memory limit: 32768K Total Submit: 53 Accepted: 27 学校一年一度的运动会开始了,由于参加的运动员人数相当多使得名单变得杂乱无章,现在给你一张名单让你对这张名单进行排序,使得排序后变得清晰一点。input输入一个整数N(N<10000)代表名单上的人数接下来N行,每行3个整数K,V,P分别代表他们的运气值、实力值和序号(保证没有相同的序号)。output经过排序后输出N行(排序时实力值大的优先,实力值相同则运气值大的优先,如果实力值和运气值都相同则序号小的优先)。每行输出一个序号。sample 阅读全文
posted @ 2010-04-20 17:46 SubmarineX 阅读(385) 评论(0) 推荐(0)
摘要:题目:http://acm.pku.edu.cn/JudgeOnline/problem?id=3618注意没有距离原点等长的两点。abs()用的极妙;先前我的代码写了146行,自己都受不了了,而且提交还是错的,郁闷;后来看了http://ren.javaeye.com/blog/344094 的代码:眼前一亮,没有我之前那么多繁杂的判断。#include<stdio.h>#include<math.h>#include<algorithm>using namespace std;bool cmp(int a, int b){ return abs(a) & 阅读全文
posted @ 2010-04-18 20:05 SubmarineX 阅读(410) 评论(0) 推荐(0)
摘要:第一次用结构体,写些自己的心得:#include<stdio.h>#include<algorithm>using namespace std;#define MAX 50000struct COW //定义结构体,(由于在cmp()函数里需要用到结构体名,所以定义了COW,并且结构体变量定义成全局变量){ long long vote1; long long vote2; int num;}cow[MAX+1]; //结构体数组int cmp1(COW a,COW b) //cmp1()在第一次sort()时用到{ return a.vote1 > b.vote 阅读全文
posted @ 2010-04-15 14:38 SubmarineX 阅读(224) 评论(0) 推荐(0)
摘要:http://acm.pku.edu.cn/JudgeOnline/problem?id=2365鄙视一下自己,净犯低级错误#include<stdio.h>#include<math.h>#define PI 3.141592653589double distance(double x1,double y1,double x2,double y2){ return sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));}int main(){ int nNail,i; double x[110],y[110],line 阅读全文
posted @ 2010-04-14 23:19 SubmarineX 阅读(592) 评论(0) 推荐(0)
摘要:集合划分问题I Time limit: 1000MS Memory limit: 32768K Total Submit: 174 Accepted: 64 问题描述:n个元素的集合{1,2,, n }可以划分为若干个非空子集。例如,当n=4 时,集合{1,2,3,4}可以划分为15 个不同的非空子集如下:{{1},{2},{3},{4}},{{1,2},{3},{4}},{{1,3},{2},{4}},{{1,4},{2},{3}},{{2,3},{1},{4}},{{2,4},{1},{3}},{{3,4},{1},{2}},{{1,2},{3,4}},{{1,3},{2,4}},{{1 阅读全文
posted @ 2010-04-12 20:24 SubmarineX 阅读(743) 评论(0) 推荐(0)
摘要:排列的字典序问题 Time limit: 1000MS Memory limit: 32768K Total Submit: 104 Accepted: 38 问题描述:n个元素{1,2,, n }有n!个不同的排列。将这n!个排列按字典序排列,并编号为0,1,…,n!-1。每个排列的编号为其字典序值。例如,当n=3时,6 个不同排列的字典序值如下:字典序值 01 2 3 4 5排列 123 132 213 231 312 321算法设计:给定n以及n个元素{1,2,, n }的一个排列,计算出这个排列的字典序值,以及按字典序排列的下一个排列。数据输入:输出元素个数n。接下来的1 行是n个 阅读全文
posted @ 2010-04-12 19:56 SubmarineX 阅读(6464) 评论(0) 推荐(1)
摘要:众数问题 Time limit: 5000MS Memory limit: 32768K Total Submit: 1128 Accepted: 276 问题描述:给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数。多重集S中重数最大的元素称为众数。例如,S={1,2,2,2,3,5}。多重集S的众数是2,其重数为3。对于给定的由n 个自然数组成的多重集S,计算S的众数及其重数。数据输入:输入多重集S中元素个数n;接下来的n行中,每行有一个自然数。结果输出:输出第1行给出众数,第2 行是重数。Sample Input6122235Sample Output23注意本题数据 阅读全文
posted @ 2010-04-12 14:25 SubmarineX 阅读(805) 评论(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 阅读(530) 评论(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 阅读(373) 评论(0) 推荐(0)
摘要:题目理解错误:第一行: 形式是:s1<s2>s3<s4>s5,只切分成5段,si可能为空或空格;第二行输出形式: ***s4s3s2s5;就这么简单,还以为要区分单词的,做得很复杂。 阅读全文
posted @ 2010-04-01 14:19 SubmarineX 阅读(182) 评论(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 阅读(284) 评论(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 阅读(262) 评论(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 阅读(256) 评论(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 阅读(173) 评论(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 阅读(421) 评论(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 阅读(316) 评论(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 阅读(255) 评论(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 阅读(440) 评论(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 阅读(201) 评论(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 阅读(337) 评论(0) 推荐(0)