排列搜索 庞果网(C语言版,虽实现了,但未通过测试,时间超过3s,使用的是全排序方法,愿大神指导)
2014-02-08 23:18
549 查看
注:虽然没有通过测试,但学会了用递归实现全排序的方法(话说此题的通过率真低呀,哪位高手知道正确答案呢?)
但刚才用gcc测了下,当N=11时,运行时间为2.3s(我的机子是linux mint 16 64bit, 酷睿双核),之前在windows上跑要7、8s呢
题目详情:
设数组a包含n个元素恰好是0..n - 1的一个排列,给定b[0],b[1],b[2],b[3],
问:有多少个0..n-1的排列a,满足(a[a[b[0]]]*b[0]+a[a[b[1]]]*b[1]+a[a[b[2]]]*b[2]+a[a[b[3]]]*b[3])%n==k ?
输入包含5个参数:N,K,B0,B1,B2,B3,其中 4<= N<12, 0 <= K,B0,B1,B2,B3 < N。
解题代码:
// 该段代码可能在庞果上编译不过(庞果你又调皮了),把报错的那个局部变量改为全局变量即可。
原题地址:http://hero.pongo.cn/Question/Details?ID=292&ExamID=287
但刚才用gcc测了下,当N=11时,运行时间为2.3s(我的机子是linux mint 16 64bit, 酷睿双核),之前在windows上跑要7、8s呢
题目详情:
设数组a包含n个元素恰好是0..n - 1的一个排列,给定b[0],b[1],b[2],b[3],
问:有多少个0..n-1的排列a,满足(a[a[b[0]]]*b[0]+a[a[b[1]]]*b[1]+a[a[b[2]]]*b[2]+a[a[b[3]]]*b[3])%n==k ?
输入包含5个参数:N,K,B0,B1,B2,B3,其中 4<= N<12, 0 <= K,B0,B1,B2,B3 < N。
解题代码:
#include <stdio.h> #define MAX_N 11 int a[MAX_N] = {0}; int g_count = 0; int g_N; // 以下使用全局变量,不想在perm函数中传太多参数 int g_K; int g_B0; int g_B1; int g_B2; int g_B3; // swap a[i] and a[offset] void swap(int i, int offset) { int temp = a[i]; a[i] = a[offset]; a[offset] = temp; } // find permutation (全排列) void perm(int offset) { if (g_N-1 == offset) // 满足条件 { g_count += (a[a[g_B0]]*g_B0 + a[a[g_B1]]*g_B1 + a[a[g_B2]]*g_B2 + a[a[g_B3]]*g_B3)%g_N==g_K; return; } else { int i; for (i = offset; i < g_N; ++i) { swap(i, offset); // 交换 a[i] a[offset] perm(offset + 1); // 向下递归 swap(i, offset); // 换回 a[i] a[offset] } } } // 题解函数 int howmany (int N,int K,int B0,int B1,int B2,int B3) { g_N = N; g_K = K; g_B0 = B0; g_B1 = B1; g_B2 = B2; g_B3 = B3; // init array a int i; for (i = 0; i < N; ++i) { a[i] = i; } perm(0); return g_count; }
// 该段代码可能在庞果上编译不过(庞果你又调皮了),把报错的那个局部变量改为全局变量即可。
原题地址:http://hero.pongo.cn/Question/Details?ID=292&ExamID=287
相关文章推荐
- WinForm通过操作注册表实现限制软件使用次数的方法
- 使用jsonp跨域调用百度js实现搜索框智能提示,并实现鼠标和键盘对弹出框里候选词的操作【附源码和在线测试地址】
- 使用ASM4.0实现AOP的功能,监控每个方法的执行时间
- C#使用IComparer自定义List类实现排序的方法
- 使用traceview测试方法时间及System.currentTimeMillis()方式错误的错误使用
- ASP.NET jQuery 食谱25 (使用jQuery UI的Autocomplete方法实现文本框的自动搜索填充功能)
- 实现功能要求统计图书的总价,编写方法查询出在50元以上的所有图书,使用排序接口图书按照价格排序(升序排序)
- 使用ntpdate工具校正linux服务器时间(实现方法)
- 安卓APP测试之使用Burp Suite实现HTTPS抓包方法
- 深入理解Spring Redis的使用 (九)、通过Redis 实现 分布式锁 的 BUG,以及和数据库加锁的性能测试
- Android低阶之【chapter - 6】Handler结合网络访问的使用方法,通过Handler实现异步网络请求
- Android HTTP实例 使用GET方法和POST方法发送请求(通过Apache接口实现)
- 在MySQL中使用Sphinx实现多线程搜索的方法
- ASP.NET jQuery 随笔 使用jQuery UI的Autocomplete方法实现文本框的自动搜索填充功能
- 使用 JavaScript 实现 XMLHttpRequest,在IE,FireFox 上测试通过
- 使用ASM4.0实现AOP的功能,监控每个方法的执行时间
- jQuery实现使用sort方法对json数据排序的方法
- Win7下的使用QTP进行猴子测试的性能日志实现方法
- 使用Collections.sort()实现List正反排序的方法
- Python单元测试_使用装饰器实现测试跳过和预期故障的方法