随笔分类 -  OJ

摘要:http://poj.org/problem?id=3984简单bfs#define MAXN 5int n, m;int Q[MAXN*MAXN];bool vis[MAXN][MAXN];bool maze[MAXN][MAXN];int dx[4] = {-1, 0, 1, 0};int dy[4] = {0, 1, 0, -1};int dir[MAXN*MAXN];int lastDir[MAXN][MAXN];int fa[MAXN][MAXN];//int dist[MAXN][MAXN];void BFS(int x, int y);void PrintPath(int x, 阅读全文
posted @ 2011-04-20 15:47 SubmarineX 阅读(232) 评论(0) 推荐(0)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=3756题目要求:点在圆锥上或在圆锥里,求符合要求的最小体积的圆锥的高和半径。解题思路:把三维中的点转化到二维(可以设想成每个点在三维中距圆锥中心的距离和高)线段上的点在圆锥曲面上,线段下的点在圆锥内部。这样,只要找到一条能把全部点包括在内的,又符合题目要求的线就行了。然后就是用三分在高的可能区域([lowHeight, highHeight])中查找#include <iostream>#include <cstdio>#include <cmath>using names 阅读全文
posted @ 2011-04-03 14:35 SubmarineX 阅读(568) 评论(0) 推荐(0)
摘要:位操作应用——异或http://acm.zju.edu.cn/onlinejudge/showContestProblem.do?problemId=4095Sample Input2aabcdefbzyxwvubzyxwvu4aqwertyeas fghaqwertyeasdfgheasdfghaqwertyaqwerty20x0abcd0ABCDEF0x0abcdSample Outputaabcdefeas fgh0ABCDEF题意:购买了n对袜子,每对袜子都有自己的名字(即7个字符)。丢失了一只,找出丢失的袜子的名字。首先想到的是对二维字符数组排序,这样很费空间。还有一种做法就是用异或 阅读全文
posted @ 2010-11-14 13:47 SubmarineX 阅读(291) 评论(0) 推荐(0)
摘要:拿这题来说事:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3421ZOJ Problem Set - 3421Error Curves Time Limit: 2 Seconds Memory Limit: 65536 KB Josephina is a clever girl and addicted to Machine Learning recently. She pays much attention to a method called Linear Discriminant Analysis, which 阅读全文
posted @ 2010-11-14 12:12 SubmarineX 阅读(620) 评论(0) 推荐(0)
摘要:http://acm.pku.edu.cn/JudgeOnline/problem?id=3292题目意思:在1,5,9,13,17。。。4*n+1中,H-primes:如5,9,13,因素只有1和其本身。H-composites:在4*n+1中,除1和H-primes以外的数(n≥0)H-semi-prime:恰好只由两个H-primes组成,可以存在多对符合要求的H-primes组合,例如:441=21*21=9*49;输入一个H-numbers;输出“H-numbers H-numbers及之前的数是H-semi-prime的个数”我开了一个 250,001 的数组来标记,开1000,0 阅读全文
posted @ 2010-08-23 17:13 SubmarineX 阅读(591) 评论(0) 推荐(0)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=2754大致意思:有一堆骨牌,码好(当然不只是单线程,最初考虑单线程的,一直wa)给你 n, m, l。n表示n张骨牌(从1-n标记),m表示 (x,y)对数,x倒了,y必倒,l 表示用手推倒的牌数,对应相应骨牌的标记号码。计算有几张骨牌倒了。第一次开了10001*10001的数组来存,明显超内存了;第二次用结构体来存(x,y);218MS 324K 793 B C++ 46MS540K733 BC++ #include<stdio.h>#include<algorithm>using 阅读全文
posted @ 2010-06-10 20:10 SubmarineX 阅读(362) 评论(0) 推荐(0)
摘要:http://acm.pku.edu.cn/JudgeOnline/problem?id=3273把N天分为M段连续区域,求M段区域中的最小最大值。其实自己还没怎么完全理解二分的实现,下面的代码是看别人写的。惭愧。#include<stdio.h>int main(){ int N,M,max,min,mid,i,k,sum,money[100001]; while(scanf("%d%d", &N, &M)!=EOF) { max=0; min=-1; for(i=1; i<=N; i++) { scanf("%d", 阅读全文
posted @ 2010-05-28 23:43 SubmarineX 阅读(304) 评论(0) 推荐(0)
摘要:进制题http://acm.pku.edu.cn/JudgeOnline/problem?id=3191其实这题是看别人的分析做的;那人很强悍,把此题看作 -2 进制来做;核心代码:while(num != 1){ if(abs(num)%2) { b[i++]='1'; num=(num-1)/-2; } else { b[i++]='0'; num/=-2; }} 阅读全文
posted @ 2010-05-17 23:37 SubmarineX 阅读(190) 评论(0) 推荐(0)
摘要:http://acm.pku.edu.cn/JudgeOnline/problem?id=3186有一些食物,放在一个两端开口的仓库里,每天只能从两端选择一端取出一件食物,并且食物的价值是随着天数逐天递增,第i天的价值 本来价值*i,求n天取出食物,使之取得最大价值;状态转移方程:dp[i][j]=max(dp[i+1][j]+t[i]*(n-j+i), dp[i][j-1]+t[j]*(n-j+i));i~j 看作 食物存放次序第 i 到 j 的一段区间i从n开始dp; 阅读全文
posted @ 2010-05-17 23:30 SubmarineX 阅读(254) 评论(0) 推荐(0)
摘要:用strlen()时的粗心http://acm.pku.edu.cn/JudgeOnline/problem?id=3193strlen()放在for()里面,反复进行多余的调用,导致超时正确代码:while(m--){ gets(str); len=strlen(str); for(i=0; i<n; i++) { if(leng[i] < len) continue; ok=1; for(k=0; k<len; k++) { if(str[k] != txt[i][k])错误代码:while(m--) { gets(str); for(i=0; i<n; i++) 阅读全文
posted @ 2010-05-17 23:23 SubmarineX 阅读(270) 评论(0) 推荐(0)
摘要:射线与圆的位置关系http://acm.nit.net.cn/showproblem.jsp?pid=1553设圆心(a,b),r起点(ox,oy),增量(dx,dy);先判断圆半径 和 圆心到直线的距离(dis = fabs(dy*(a-ox)+dx*(oy-b))/sqrt(dx*dx+dy*dy) - r;)关系;if(dis > 0)printf("yes\n");else再判断:(ox,oy)到圆心的距离(dis1 = sqrt((a-ox)*(a-ox)+(b-oy)*(b-oy));)和 (ox+dx/10000,oy+dy/10000)到圆心的距离(d 阅读全文
posted @ 2010-05-16 20:21 SubmarineX 阅读(473) 评论(0) 推荐(0)
摘要:http://acm.pku.edu.cn/JudgeOnline/problem?id=3256题意:有k头牛,n个牧场,m条路(每条路相连两个牧场且单向),求全部牛都能到达的牧场有几个。分析:用DFS,从每头牛所在牧场开始,走遍该牛能到的牧场,对应能到达的牧场记录来过的牛数心得:原先我是对每个牧场作为起点,进行DFS,当然条件是有路并且对应牧场有牛。不过比较牧场数(n≤1000)和牛数(k≤100),实在太浪费时间了。部分代码:main()里的调用部分:for(i=1; i<=cow; i++)//对应某只牛{ memset(vis, 0, sizeof(vis));//初始化下一个 阅读全文
posted @ 2010-05-15 21:08 SubmarineX 阅读(332) 评论(0) 推荐(1)
摘要:http://acm.pku.edu.cn/JudgeOnline/problem?id=3039题意:找到一个最接近于 input分式 的分式思路:分母从 1 到 62767 一次枚举,用 min 记录 原分式的值 与 当前考察分式 的 差值(刚开始自己想得很简单,题目也没看清。花了很多时间和精力,几乎想放弃了。最终得到同学的提示,才弄出来的。)min = 1.0;tz = -1;tm = -1;t = z/m;for(i=1; i<=32767; i++){ x = ceil(z*i/m); if( (temp=fabs(x/i - t)) < min && t 阅读全文
posted @ 2010-05-11 22:48 SubmarineX 阅读(270) 评论(0) 推荐(0)
摘要:http://acm.pku.edu.cn/JudgeOnline/problem?id=3049参考别人代码写的:#include<stdio.h>int L, C;char list[27], set[27];void find(int i, int vovel, int ith){ if(ith == L) { if(vovel) printf("%s\n", set); return ; } for(; i<=C-L+ith; i++) { set[ith] = list[i]; find(i+1, vovel+(set[ith] == ' 阅读全文
posted @ 2010-05-08 23:16 SubmarineX 阅读(227) 评论(0) 推荐(0)
摘要:http://acm.pku.edu.cn/JudgeOnline/problem?id=1651分析来自:http://www.tkz.org.ru/2009-10/poj-1651-multiplication-puzzle/分析:本来以为是矩阵连乘,谁知道不是。 以下内容来自POJ讨论版。 对于整个牌的序列,最左端和最右端的牌是不能被取走的,除这两张以外的所有牌,必然有一张最后取走。取走这最后一张牌有一个仅与它本身以及最左端和最右端的牌的值有关的得分,这个分值与其他牌没有任何关系。当这张最后被取走的牌被定下来以后(假设位置为j), 最左端到j之间的所有牌被取走时所造成的得分必然只与这之间 阅读全文
posted @ 2010-05-05 23:19 SubmarineX 阅读(476) 评论(0) 推荐(0)
摘要:http://acm.pku.edu.cn/JudgeOnline/problem?id=1664还是没理解为什么这么做#include<stdio.h>int dg(int m, int n){ if(m < 0) return 0; if(m == 0 || n == 1) return 1; return dg(m-n, n) + dg(m, n-1);}int main(){ int t, m, n; while(scanf("%d", &t) != EOF) { while(t--) { scanf("%d%d", & 阅读全文
posted @ 2010-05-03 22:57 SubmarineX 阅读(179) 评论(0) 推荐(0)
摘要:第一次完成DFShttp://acm.pku.edu.cn/JudgeOnline/problem?id=1164题目求:房间的个数和房间的最大面积。思路:为了调试看起来方便,用8表示墙,用0表示通路(当然房间区域也是可以走通的,所以也用0表示),用(2*row+1)*(2*column+1)的矩阵来表示(0 ≤ i≤ 2*row,0 ≤j≤ 2*column),当 i,j 都为奇数时,点(i , j)表示房间区域, 其余则为墙或门。心得:原先没有想到还有这种情况:3 33 2 61 0 49 8 12经过调试发现,房间区域为8了,但路上还是0,这样就会引起重复计算,对dfs()做了修改:wh 阅读全文
posted @ 2010-05-02 14:30 SubmarineX 阅读(345) 评论(0) 推荐(0)
摘要:http://acm.pku.edu.cn/JudgeOnline/problem?id=1088状态转移方程:DP(i ,j) = max(DP(i - 1, j), DP(i + 1,j), DP(i , j - 1), DP(i , j + 1)) + 1;代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->//刚开始接触DP题,用起来也很不熟练,看了discuss写的#include<stdio.h>int row, co 阅读全文
posted @ 2010-04-27 21:35 SubmarineX 阅读(247) 评论(0) 推荐(0)
摘要:http://acm.pku.edu.cn/JudgeOnline/problem?id=2376在T天里干完一件事,有多只牛,每只牛负责连续几天,日期可能重叠。找出最少数量的牛干完这件事。(可能讲的不清楚)#include<stdio.h> #include<algorithm> using namespace std; struct ORDER { int left; int right; }order[25001]; bool cmp(ORDER a, ORDER b) { return a.left < b.left; } int main() { int 阅读全文
posted @ 2010-04-21 23:28 SubmarineX 阅读(538) 评论(0) 推荐(0)
摘要:最大的和 Time limit: 1000MS Memory limit: 32768K Total Submit: 77 Accepted: 39 Problem Description给出一串 a[1],a[2],a[3]......a[n], 计算出最大的字串和For example, given (6,-1,5,4,-7), the max sum in this sequence is 6 + (-1) + 5 + 4 = 14.Input第一行给出一个数字 T(1<=T<=20) 代表接下来的组数.接下来每 T 行,开始给出一个数组 N(1<=N<=1000 阅读全文
posted @ 2010-04-21 16:42 SubmarineX 阅读(247) 评论(0) 推荐(0)