SPOJ:洗牌

2024-03-31

最近开始解答网上评委的问题。我被困在SPOJ 中的这个问题 http://www.spoj.pl/problems/CODESPTC/:

下面是洗 N 张牌的算法:

  1. 这些牌被分成 K 个相等的牌堆,其中 K 是 N 的因数。
  2. 底部的 N/K 张牌按相同顺序属于第 1 堆(因此 .initial 堆的底部牌是第 1 堆的底部牌)。
  3. 从底部开始接下来的 N/K 张牌属于第 2 堆,依此类推。
  4. 现在洗完的牌堆的顶牌是第 1 堆的顶牌。下一张牌是第 2 堆的顶牌,...,洗完的牌堆的第 K 张牌是 K 堆的顶牌。那么 (K + 1) 第一张牌是现在位于第 1 堆顶部的牌,第 (K + 2) 张牌是现在位于第 2 堆顶部的牌,依此类推。

例如,如果N = 6且K = 3,则一副牌的顺序“ABCDEF”(从上到下)洗一次后将变为“ECAFDB”。

给定 N 和 K,最少需要多少次洗牌才能将堆恢复到原来的顺序?


我尝试模拟,但超出了时间限制。有数学方程式吗?


是的,这个问题有一个数学解决方案。

首先让我从一些关于如何解决此类问题的提示开始,然后我将给出一些关于实际解决方案的提示。我不会完全完成它,因此仍然存在一些挑战。

So: how to approach such problems? What you did is actually a good start. Write a simulation and run it against some small cases. The simulation should be fairly fast there. Now you have some more values. Write them down on a piece of paper and start staring at them. You have fro instance if K = x1 and N = y1 then the result is z1 and a lot more such pairs. Try to figure some formula. Focus on triples that have a fixed value for x, for y or for z. What do they have in common? And so on. You stare and usually you get a bright idea after some time :)

现在:关于这个特定问题的一些提示。进行一次洗牌迭代并记下每张牌的去向。例如,卡 1 位于位置 3,卡 3 位于位置 2,依此类推。请注意,某些链将以这种方式形成 - 例如在示例中 n=6,k=3,我们有一个长度为 6 的链: 1->3->2->6->4->5->1 。现在计算所有链的长度(每张卡都属于一个链)并尝试找出答案如何取决于这些长度。

希望这足以帮助您解决问题。

编辑:看看模拟单次迭代的约束可能会非常慢。如果是这种情况,在完成我在第二个技巧中建议的操作后,尝试计算链的长度,而无需实际模拟一次洗牌

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SPOJ:洗牌 的相关文章

  • 交换两个向量之间的值,使两个向量的 max_element 之和最小

    这是 Codechef 的问题 但请耐心等待 https www codechef com ZCOPRAC problems ZCO16001 https www codechef com ZCOPRAC problems ZCO16001
  • 如何动态查找连接组件

    使用不相交集数据结构可以很容易地得到图的连通分量 而且 它只是支持增量连接组件 http www boost org doc libs 1 46 1 libs graph doc incremental components html 然而
  • 处理中渲染极地带面体时出现问题

    我最近一直在研究 Zohedrons 和Rob Bell http zomadic com 做出了美丽的 我玩了免费的极地带面体 Sketchup 插件 http zomebuilder com 并考虑使用几何图形加工 http proce
  • 按度数在圆上找到一个点?

    假设我们有一个 100x100 坐标系 如下所示 0 0 是它的左上角 50 50 是它的中心点 100 100 是它的右下角 等等 现在我们需要从中心向外画一条线 我们知道线的角度 但需要计算其终点的坐标 您认为最好的方法是什么 例如 如
  • Java:如何实现3和?

    我正在研究 3 Sum 来自己实现它 并遇到了以下规则的实现 给定一个由 n 个整数组成的数组 S S 中是否存在满足 a b c 0 的元素 a b c 查找数组中所有总和为零的唯一三元组 注意 三元组 a b c 中的元素必须按非降序排
  • 如何从二叉搜索树中均匀随机地返回节点?

    给定一个 BST 可能平衡也可能不平衡 如何能够均匀地随机返回 任何 节点 一个限制是您不能使用外部索引数据结构 您必须以每个节点都有平等被访问的机会的方式遍历树 这个问题让我困惑了好一阵子 如果我们确实可以使用外部哈希表 指针 我们可以对
  • 在关键服务器上对字符串进行内存受限的外部排序,并合并和计算重复项(数十亿个文件名)

    我们的服务器生成如下文件 c521c143 2a23 42ef 89d1 557915e2323a sign xml在其日志文件夹中 第一部分是GUID 第二部分是名称模板 我想计算具有同名模板的文件的数量 例如 我们有 c521c143
  • 32 位数字中 1 的数量

    我正在寻找一种在 32 位数字中包含 1 数量的方法 之间不使用循环 任何人都可以帮助我并向我提供代码或算法吗 这样做 提前致谢 See Integer bitCount int http java sun com javase 6 doc
  • 如何使用 PHP 以任意顺序进行字符搜索(12 个字母,其中 6 个字母构成一个单词)?

    我整天都在想这个问题 似乎无法找出一种记忆有效且快速的方法 问题是 例如 我有这些信 e f j l n rr t t u w x 12 个字母 我正在找这个词 海龟 6 个字母 如何使用 php 找到完整范围 12 个单词 中所有可能的单
  • 如何求解:T(n) = T(n - 1) + n

    我已经解决了以下问题 T n T n 1 n O n 2 现在 当我解决这个问题时 我发现界限非常松散 我是否做错了什么 或者只是这样 您还需要一个递归关系的基本情况 T 1 c T n T n 1 n 为了解决这个问题 您可以首先猜测一个
  • 将嵌套字典中的所有键从camelCase转换为snake_case

    我有一本类似这样的字典 firstName abc lastName xyz favoriteMovies Star Wars The lone ranger favoriteCountries country China capitalC
  • 使用主方法求解 T(n) = 2T(n/2) + n/log n 和 T(n) = 4T(n/2) + n/log n 之间的差异

    我最近偶然发现了一个资源 其中 2T n 2 n log ntypeMM 宣布复发无法解决 我接受它作为一个引理 直到今天 另一种资源被证明是矛盾的 在某种意义上 根据资源 下面的链接 其中的 Q7 和 Q18 是建议 分别在问题中的1和2
  • 确定解决迷宫问题的最小线段数

    我有一个问题 我需要定义一个具有最少数量的顶点的多边形 该多边形与不透明的图像中的每个像素相交或包含每个像素 令 N 为图像中的像素数 我唯一的假设是图像的边界 孔 内不能包含透明像素 并且至少有两个像素是不透明的 举个例子 假设我有以下图
  • 寻找距离原点最近的 100 颗恒星的算法

    首先让我提出正确的问题 问 有一个文件包含超过一百万个点 x y 每个点代表一颗星星 a b 处有一颗行星地球 现在 任务是构建一种算法 返回距离地球最近的 100 颗恒星 您的算法的时间和空间复杂度是多少 这个问题在各种采访中被问过很多次
  • 在 C# 中存储矩阵值的快速且有用的方法

    我需要用 C 为 3D 引擎创建一个 4x4 矩阵类 我见过一些其他引擎将矩阵值存储在单个浮点成员变量 字段中 如下所示 float m11 m12 m13 m14 float m21 m22 m23 m24 float m31 m32 m
  • 如何确定算法函数的复杂度?

    您如何知道算法函数对于特定操作是否需要线性 常数 对数时间 它取决于CPU周期吗 您可以通过三种方式 至少 做到这一点 在网上查找算法 看看它是如何描述其时间复杂度的 根据输入大小 自己检查算法 查看嵌套循环和递归条件等内容 以及每个循环运
  • 寻找将集合映射到整数的双射函数

    对于任意两个序列 a b 其中 a a1 a2 an 且 b b1 b2 bn 0a b具有相同的元素 而不关心它们的顺序 例如 如果 a 1 1 2 3 b 2 1 3 1 c 3 2 1 3 则 f a f b f a f b 我知道有
  • 有效地生成所有排列

    我需要尽快生成所有排列 https en wikipedia org wiki Permutation整数的0 1 2 n 1并得到结果作为NumPy https numpy org 形状数组 factorial n n 或者迭代此类数组的
  • 在 C++ 中通过引用传递 std 算法谓词

    我正在尝试从 a 中删除元素std list并保留已删除元素的一些统计信息 为此 我使用列表中的remove if 函数 并且我有一个谓词 我想使用这个谓词来收集统计数据 这是谓词的代码 class TestPredicate privat
  • 两组数的最小公等和及组合

    我目前正在用 C 创建一个程序 该程序将查找两组数字的尽可能低的相等总和 您可以在其中根据需要多次重复这些数字 比如我有这两套 10 13 18 and 12 16 22 我能得到的最低金额是28 10 18 and 12 16 另一个例子

随机推荐

  • 使用 Angular UI Router 在视图中进行 ng-click 时,范围变量不会更新

    我对以下代码有问题 Plunkr http plnkr co edit L62Ri3TVL4lC7U4o5iYR 当我点击按钮时 ng click改变变量var1在适用范围 但显然这个变量没有在我用 UI Router 创建的视图中更新 看
  • 使用 VBA 代码 Ping IP 地址并在 Excel 中返​​回结果

    我有一些 Visual Basic 代码 见下文 用于测试 B 列 Excel 电子表格 中的 IP 连接 并将其是否已连接或无法访问放在 C 列中 我只是想知道您是否可以帮助我如果 已连接 则希望它为绿色 而任何其他结果将为红色 另外 这
  • 如何在 FormBuilder 中使用 updateOn 模糊

    我有一个自定义异步验证器 我想设置updateOn blur 财产使用FormBuilder myForm this formBuilder group email Validators required this myAsyncValid
  • 在第一个表单的位置精确显示第二个表单

    从主表单 Form1 我调用显示另一个表单 Form2 但我希望它显示与 form1 完全相同的位置和大小 这样我们就无法再看到 form1 了 直到我们关闭 form2 或将其移到其他地方 所以我写了这些行 Form2 f2 new Fo
  • Mac:执行 Vagrant 使用的 CLI“VBoxManage”时出现错误

    我正在使用 aerospike 并使用 vagrant virtual box 安装它 安装后 当我尝试启动虚拟机时 出现以下错误 执行时出现错误VBoxManage Vagrant 使用的 CLI 用于控制 VirtualBox 命令和
  • Swing JForm 冻结直到操作完成[重复]

    这个问题在这里已经有答案了 我想创建一个使用 swing 组件可视化合并排序的 Java 应用程序 到目前为止我已经写了这个 import java awt event ActionEvent import java awt event A
  • 打破Java中的for循环[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 在我的代码中 我有一个 for 循环
  • 如何将字符串拆分为新行,同时维护 R 中的其他列[重复]

    这个问题在这里已经有答案了 我想将字符向量列拆分为多行 同一数据帧 同时维护其他列 keep 在这个可重现的例子中 dat lt structure list ID c E87 E42 E39 E16 E17 E18 E760 E761 E
  • 如何从 Mac OS X 交叉编译到 Linux x86?

    我正在运行 Mac OS X 10 5 8 并希望使用 GCC 4 1 2 为目标 CentOS 5 3 进行编译 我怎么能 编译GCC 4 1 2工具链及相关工具 使用该工具交叉编译目标 CentOS 5 3 任何帮助是极大的赞赏 最简单
  • Django 项目的 Pyinstaller 错误“ImportError:没有名为 'django.contrib.admin.apps' 的模块”

    我在 django 中创建了一个项目 我已经使用 pyinstaller 为其创建了安装程序 如果我使用运行项目python 管理 py runserver然后项目运行良好 没有任何错误 但我无法通过安装程序运行它 我在运行安装程序时遇到错
  • 在 R 中循环有序集的函数式方法

    我正在尝试优化 R 中的算法 该算法在一组有序值上运行 并确定 未来 在该组的更下方 是否存在比给定值更低的值 例如 Value RestOfSeriesContainsLowerValue 5 true 4 true 2 true 1 f
  • 尝试在 FabricJS 中使用句柄创建对话气泡

    我正在尝试使用 FabricJS 创建一个语音气泡 以集成到 WordPress 插件中 希望 免费发布 以帮助人们注释图像 我在这里找到了原始的气泡 语音气泡 html5 canvas js https stackoverflow com
  • Jetty 和其他容器如何在遵守 Servlet 规范的同时利用 NIO?

    我是 NIO 的新手 我正在尝试弄清楚 Jetty 如何利用 NIO 我对使用 Blocking IO 的传统 servlet 容器如何服务请求的理解如下 请求到达 分配一个线程来处理请求和 servlet 方法 doGet等 被调用 Se
  • ServiceStack:手动调用服务时恢复管道?

    作为后续这个问题 https stackoverflow com questions 64560997 servicestack messaging api can it make a broadcast 我想了解如何改进我对服务的手动调用
  • Wildfly 8.0.0.Final JTA 事务问题

    由于我们在事务中使用了大量 ApplicationScoped bean 但我们不想使用 EJB ApplicationScoped bean 不适用于无状态 bean 因此我们创建自己的事务拦截器 例如 Resource UserTran
  • 使用 C# 重新启动应用程序

    如何使用 C 重新启动我的 WPF 应用程序 我认为 WPF 中没有像 WinForms 中那样的直接方法 但是 您可以使用以下方法Windowns Form像这样的命名空间 您可能需要添加对System Windows Form集会 Sy
  • 在 Mathematica 中查找先前定义的消息

    Mathematica 默认定义了许多有用的消息来表示常见错误 例如使用错误数量的参数调用函数或未找到文件 一般来说 我更喜欢尽可能使用现有的 已定义的消息 因为这样可以更轻松地通过诸如Check Quiet and On Off 然而 我
  • 将应用程序更新到新代码库后,AsyncStorage 是否仍然保留?

    我有一个react native项目中我计划重新编写所有的代码库 新的源代码 我打算使用相同的包 ID 所以我的客户 他们希望用户能够收到有关新应用程序版本的通知 而他们更新后 登录状态将保持 这样用户就不必再次登录 所以我想知道在这种情况
  • Rails 子域路由重定向

    我们无法更改服务器配置文件 因此我们需要在 Rails 级别进行重定向 我对外部站点的路径重定向没有问题 例如 match meow gt redirect http meow com 问题出在子域上 我需要重定向 例如 http my e
  • SPOJ:洗牌

    最近开始解答网上评委的问题 我被困在SPOJ 中的这个问题 http www spoj pl problems CODESPTC 下面是洗 N 张牌的算法 这些牌被分成 K 个相等的牌堆 其中 K 是 N 的因数 底部的 N K 张牌按相同