📜  什么是竞争性编程中的临时问题?

📅  最后修改于: 2022-05-13 01:58:11.761000             🧑  作者: Mango

什么是竞争性编程中的临时问题?

Ad Hoc 问题是无法在具有充分研究的解决方案的类别中分类到其他任何地方的问题,因为每个问题描述及其相应的解决方案都是唯一的。这些问题不属于标准类别,不存在解决它们的特定或通用技术。许多 Ad Hoc 问题很容易,但这并不适用于所有 Ad Hoc 问题。

  1. Ad Hoc 问题经常出现在编程竞赛中。在 ICPC 中,每 10 个问题中有 1-2 个是 Ad Hoc 问题。在编程比赛中,如果 Ad Hoc 问题很简单,通常会是团队解决的第一个问题。但是,在 Ad Hoc 问题的解决方案过于复杂而无法实施的情况下,导致一些团队在最后一个小时内解决了这些问题。在一个有大约 60 支球队的 ICPC 区域比赛中,如果你只能解决 Ad Hoc 问题,你的球队将排名下半部分(排名 30-60)。
  2. 在 IOI 2009 和 2010 年,每个比赛第 11 天有 1 个简单任务,通常是(简单)临时任务。如果您是 IOI 参赛者,您绝对不会因为在 2 天的比赛中仅解决 2 个简单的 Ad Hoc 任务而赢得任何奖牌。但是,您越快完成这 2 个简单的任务,您将有更多的时间来处理其他 2 × 3 = 6 个具有挑战性的任务。

临时问题提示

有一些通用提示可用于处理似乎是 Ad Hoc 的问题:

  1. 写下想法:只要有一个看起来有用的观察,就把它写下来,因为写下这些想法可以确保它们不会被遗忘,并且可能成为解决方案。
  2. 不要陷入困境:不要陷入任何特定的想法,除非它似乎是解决问题的完整解决方案。完成搜索是一个更好的主意,因为临时问题会浪费大量时间。
  3. 画很多小案例:为了更好地理解问题,建议练习画很多小案例。在以下情况下绘制更多案例-
    • 调试有问题。
    • 如果你不知道如何从一个问题开始。
    • 每当不确定如何进一步解决问题时。
    • 最好的办法是画出更多的案例,并对问题的性质进行观察。
  4. 不同的角度:尝试从不同的角度来处理问题。不断尝试这些想法,画出问题的视觉描述,尝试不同的公式,公式中的不同值,直到取得进展。
  5. 在解决方案中实现模式:在解决了许多编程问题后,尝试在解决方案中实现模式。在竞争性编程中经常使用某些习语。
    1. 例如,从 C/C++ 的角度来看,这些习惯用法可能包括要包含的库,如 cstdio、cmath、cstring 等、数据类型快捷方式、基本 I/O 例程、循环宏等。
    2. C/C++ 有竞争力的程序员可以将这些存储在像“adhocproblems.h”这样的头文件中。有了这样的头文件,每个问题的解决方案都可以从程序#include 开头的简单头文件开始。

临时问题集的类别

让我们讨论一下 Adhoc 问题集的一些类别:

  1. 纸牌游戏:有很多与纸牌游戏相关的 Ad Hoc 问题。一种方法是解析输入字符串,因为扑克牌都有两种花色-
    1. D/Diamond、C/Club、H/Heart 和 S/Spades。
    2. 对于排名,通常的顺序是:2 < 3 < 。 . .< 9 < T/10 < J/Jack < Q/Queen < K/King < A/Ace12。
    3. 将这些字符串映射到整数索引可能是个好主意。
    4. 例如,一种可能的映射是映射 D2 → 0,D3 → 1,...。 . . , DA → 12, C2 → 13, C3 → 14,。 . . , SA → 51。然后使用整数索引变得更加容易。
  2. 国际象棋游戏:国际象棋是另一种流行的游戏,出现在编程竞赛问题中,其中一些问题是 Ad Hoc 问题。例如,计算在 8×8 棋盘中放置 8 个皇后有多少种方式的组合任务。
  3. 其他游戏:许多其他游戏,如井字游戏、剪刀石头布、蛇/梯子、宾果游戏、保龄球等也进入了编程比赛。了解这些游戏的细节可能会有所帮助,但大多数游戏规则都列在问题描述中,以避免对不熟悉游戏的参赛者造成不利影响。
  4. 回文相关问题:回文是可以在任一方向以相同方式阅读的单词(或序列)。检查一个单词是否是回文的最常见策略是从第一个字符循环到中间一个字符,并检查字符是否从后面的相应位置匹配。例如,'ABCDCBA' 是一个回文。
  5. 字谜相关问题:字谜是一个单词(或短语),其字母可以重新排列以获得另一个单词(或短语)。检查两个单词是否是字谜的常用策略是对单词的字母进行排序并比较结果。例如,取 wordA = 'cab',wordB = 'bca'。排序后,wordA= 'abc' 和 wordB = 'abc' 也是,所以它们是字谜。