2013年2月23日

uva10012 - How Big Is It?

摘要: 看到这个题,很快的就敲出了全排列的递归程序,结果一直WA。。。。看人家的代码都没看明白,直到看到人家的解释才懂了。。。无语。。。原来自己想的情况太理想化了,没有考虑到特大圆,与特小圆存在的特例。如果一味的按照顺序相切下去,有可能存在与前面的大圆相交的情况。代码是在原来基础上改的,先贴以一下吧。代码如下:#include #include #include using namespace std; double radii[10], recoder[10], MIN; int comp(const void *a, const void *b) { return *(double*... 阅读全文
posted @ 2013-02-23 00:47 Primo... 阅读(200) 评论(0) 推荐(0)
2013年2月22日

浮点数的比较

摘要: 首先,这个不算原创,原文是洋文的,我翻译了一下写这个文章的人绝对是个大师,虽然知识并不是很深奥,不过想法真的很不错,值得学习两个月前忽然看见的这篇文章,昨天仔细读了一遍,翻译了一下,原文在此http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm这是我翻译的,里面有些地方翻译的不太对,有些地方我也不懂,你们谁要是看懂了就告诉我浮点数的比较Bruce Dawson两数完全相等整型数是精确的,浮点数并不是那样。举个简单的例子,0.2这个数无法用二进制的浮点数精确表示,并且有限的精度意味着微小的误差在经过多次操 阅读全文
posted @ 2013-02-22 22:28 Primo... 阅读(3471) 评论(0) 推荐(3)

uva331 - Mapping the Swap

摘要: 题意不难理解,就是一个个排列排序的map的种数。对于4 3 2 1 , 可见可以先对4 3 交换,或者对3 2 交换,或者对 2 1 交换。然后分情况依次交换,共有16种map。还是回溯的简单利用。。。不难。。。代码如下:#include int num[10], _case, n; void swap(int a, int b) { int temp = num[a]; num[a] = num[b]; num[b] = temp; } void print_case(int cur) { int f = 1; for(int i = 1; i nu... 阅读全文
posted @ 2013-02-22 21:56 Primo... 阅读(116) 评论(0) 推荐(0)

uva10344 - 23 out of 5

摘要: 下面的东西,你知道几个:1、不同的排列相同的运算符得到的结果不同,2、在生成排列前必须要排序数据。好了,对于这个题,也没有什么好说的,直接贴代码把;代码如下:#include #include using namespace std; int num[5], possible; void print_product(int cur, int product) { if(possible)return; if(cur==5) { if(product==23&&!possible) {possible = 1; } return;} print_produc... 阅读全文
posted @ 2013-02-22 18:36 Primo... 阅读(147) 评论(0) 推荐(0)

uva301 - Transportation

摘要: 求取列车公司最大利润,对于某一区间的车票要拒则全拒,此题类似与子集生成问题,开始的时候想用子集生成+判断合理性,但是觉得比较耗时,所以就一边列子集,一边判断合理性,以至于及时回溯。代码如下:#include int capacity, n, m, max; int order[22][3], num[10]; void print_price(int cur, int price) { if(cur==m) { if(max<price) max = price; return; } int ff = 1, f[10] = {0... 阅读全文
posted @ 2013-02-22 17:32 Primo... 阅读(115) 评论(0) 推荐(0)
2013年2月21日

uva539 - The Settlers of Catan

摘要: #include #include bool f[26][26], visit[26][26]; int n, m; int dfs(int u) { int ans = 0, t; for(int i = 0; i < n; i++) if(f[u][i]&&!visit[u][i]) { visit[u][i] = visit[i][u] = 1; t = dfs(i)+1; ans = ans < t?t:ans; visit[u][i] = visit[i][u] = 0; } ... 阅读全文
posted @ 2013-02-21 15:57 Primo... 阅读(104) 评论(0) 推荐(0)

uva639 - Don't Get Rooked

摘要: 对于这个题,开始弄了个跑20ms的代码,一个小时的优化后,跑了12ms。。。。思路不难,就是把问题分成一步步的。每一步弄成个递归就行了。先贴一下20ms 的代码/代码如下:#include char f[5][5]; int n, max; int is_caninset(int c, int l) { if(f[c][l]=='X'||f[c][l]=='/'||f[c][l]=='o')return 0; for(int i = l+1; i = 0; i--) if(f[c][i]=='X') break; else if( 阅读全文
posted @ 2013-02-21 11:22 Primo... 阅读(145) 评论(0) 推荐(0)
2013年2月20日

uva216-Getting in Line(网络连线)

摘要: 回溯-理解中。。。寻找最短连线++++++(生成排列)还要注意缩短时间的技巧----及时回溯,代码经过努力有68ms优化到了24ms。。。还是不知道人家那种0ms 的神代码怎么写的。先贴一下自己的代码吧!!代码如下:#include #include #include int x[10], y[10], f[10], a[10], A[10]; double MIN, d[10], D[10]; void find_mindis(int n, int cur, double sum) { if(cur==n) { if(sumMIN)return; ... 阅读全文
posted @ 2013-02-20 22:25 Primo... 阅读(208) 评论(0) 推荐(0)
2013年2月16日

uva110-Meta-Loopless Sorts(没有循环的排序程序)

摘要: 对于这个题,我也尝试了多种结构,如链表,二叉树,数组;最后我还是按照类似插入排序的方法做出来的。以a,b,c, d为例,加入已经排好了a #include void outputspace(int spacenumber) { for(int i = 0;i = 0; i--) { if(i==cur) { outputspace(cur); printf("if %c < %c then\n",'a'+f[i-1],'a'+cur); f[cur] = cur; if... 阅读全文
posted @ 2013-02-16 16:00 Primo... 阅读(146) 评论(0) 推荐(0)
2013年2月15日

uva729 - The Hamming Distance Problem(Hamming距离问题)

摘要: 题意比较简单,简单的让我有点害怕自己犯想当然的毛病给三个数据 t-测试数据组数, n-字符串的长度, h-字符串中‘1’的个数。(其余的一定是‘0’)(我用的是STL中的库函数next_permutation())代码如下:#include #include using namespace std; int main () { int t, n, h; char p[20]; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&h); p[n]=0; for(i... 阅读全文
posted @ 2013-02-15 14:24 Primo... 阅读(144) 评论(0) 推荐(0)