热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

排列搜索庞果网(C语言版,虽实现了,但未通过测试,时间超过3s,使用的是全排序方法,愿大神指导)

注:虽然没有通过测试,但学会了用递归实现全排序的方法(话说此题的通过率真低呀,哪位高手知道正确答案呢?)题目详情:设数组a包含n个元素恰好是0..n-1的一个排列,


注:虽然没有通过测试,但学会了用递归实现全排序的方法(话说此题的通过率真低呀,哪位高手知道正确答案呢?)


       但刚才用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


解题代码:

#include
#define MAX_N 11
int a[MAX_N] = {0};
int g_count = 0;
int g_N;
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 {
swap(i, offset);
perm(offset + 1);
swap(i, 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 {
a[i] = i;
}
perm(0);
return g_count;
}

// 该段代码可能在庞果上编译不过(庞果你又调皮了),把报错的那个局部变量改为全局变量即可。

原题地址:http://hero.pongo.cn/Question/Details?ID=292&ExamID=287


推荐阅读
  • 抽象工厂模式 c++
    抽象工厂模式包含如下角色:AbstractFactory:抽象工厂ConcreteFactory:具体工厂AbstractProduct:抽象产品Product:具体产品https ... [详细]
  • VS Code 中 .vscode 文件夹配置详解
    本文介绍了 VS Code 中 .vscode 文件夹下的配置文件及其作用,包括常用的预定义变量和三个关键配置文件:launch.json、tasks.json 和 c_cpp_properties.json。 ... [详细]
  • Pandas中使用sort_values方法进行数据排序
    本文介绍了如何利用Python的Pandas库中的sort_values方法对DataFrame对象进行排序。首先通过Numpy库生成随机数据,然后详细解释了DataFrame的创建过程及其参数,并重点探讨了sort_values方法的使用技巧。 ... [详细]
  • 13、单向链表
    头文件:LinkList.hLinkList.cmain.cVS2 ... [详细]
  • UVA 401 - 镜像回文字符串
    本题探讨了如何判断一个字符串是否为普通回文、镜像回文或两者都不是。通过特定的字符映射表来实现字符串的镜像转换,并根据转换后的结果进行分类。 ... [详细]
  • 本文探讨了SQLAlchemy ORM框架中如何利用外键和关系(relationship)来建立表间联系,简化复杂的查询操作。通过示例代码详细解释了relationship的定义、使用方法及其与外键的相互作用。 ... [详细]
  • 深入解析Android Activity生命周期
    本文详细探讨了Android中Activity的生命周期,通过实例代码和详细的步骤说明,帮助开发者更好地理解和掌握Activity各个阶段的行为。 ... [详细]
  • 探讨并提供解决方案以应对 'view is not in the window hierarchy' 的错误提示。 ... [详细]
  • 多用户密码验证与加密登录系统
    本文介绍了一种基于多用户密码文件的加密登录方法,通过读取用户密码文件并使用简单的加密算法实现安全登录。文中详细描述了程序的设计思路及其实现过程。 ... [详细]
  • 本文详细介绍了一种实现PopupWindow全屏显示且能有效隐藏虚拟按键的技术方案,适用于Android开发。此方法经过实际测试,表现良好,兼容性优秀。 ... [详细]
  • BeautifulSoup4 是一个功能强大的HTML和XML解析库,它能够帮助开发者轻松地从网页中提取信息。本文将介绍BeautifulSoup4的基本功能、安装方法、与其他解析工具的对比以及简单的使用示例。 ... [详细]
  • 本文探讨了 Boost 库中的 Program Options 组件,这是一个强大的工具,用于解析命令行参数和配置文件。文章介绍了如何正确设置和使用该组件,包括处理复杂选项和负数值的方法。 ... [详细]
  • C基本语法C程序可以定义为对象的集合,这些对象通过调用彼此的方法进行交互。现在让我们简要地看一下什么是类、对象,方法、即时变量。对象-对象具有状态和行为 ... [详细]
  • 3144:[Hnoi2013]切糕TimeLimit:10SecMemoryLimit:128MBSubmit:1261Solved:700[Submit][St ... [详细]
  • 题目描述墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问。墨墨会像你发布如下指令ÿ ... [详细]
author-avatar
门前西瓜飘乐
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有