title : 提交答案型题目
date : 2022-4-28
tags : ACM,杂项
author : LINNO


提交答案型题目

提交答案型题目相较于传统题目来的特点是,每个测试点的分都可以运用一些奇技淫巧来骗到,每个测试点通常有部分分可以骗,往往可以不涉及复杂的算法,但是代码量可能比较大(一道题可以分成10道题来写)。

手算

在输入文件中特别小的数据,如果可以手算解决,可以直接手算打表骗分。

搜索

假设一场比赛5个小时都在运行爆搜程序,那么即便写不出正解,也可能求出不少打表结果。

非完美程序

有一些数据,结合题目会变成贪心解法/动态规划/分治等等,可以针对数据类型写多个解法。

程序辅助构造

有时对应的数据是构造的,但是很长,需要用程序了写输出。

骗分

手写每个输入对应的输出。

启发式搜索

在状态空间中的搜索对每一个搜索的位置进行评估,得到最好的位置,再从这个位置进行搜索直到目标。这样可以省略大量无谓的搜索路径,提高了效率。同属来讲就是奇技淫巧,在一般题目中只能用来骗分,但这往往是提交答案型题目的正解。

①爬山算法

若给定一个F(x)F(x)F(x)为未知的函数,如何求最大值?

  • 选择一个状态作为基准,然后从基准态开始向相邻位置扩展
  • 相邻位置若更优,则替换为新的基准态;
  • 往往会得到极大值
  • 重复以上步骤,就可以得到最大值。

若是N维的情况下,归结上述思路为:

  • 随机向某个方向扩展
  • 差不多收敛时即认为已达到极大值

爬山算法隐藏的风险:

  • 初始状态基本确定了这次调整的结果
  • 如果可以跳出局部最优,程序会出错
②模拟退火

模拟退化的主要思想是:随着时间的推移,变化的概率会越来越小。

  • 选取初始状态
  • 向随机的方向扩展
  • 如果优于当前状态,则接受;如果列于当前状态,则仍有一定概率接受
  • 时间T越久,概率越小,直到稳定为止。
  • 现实中:P=e−ΔtTP=e^{-\frac{\Delta t}{T}}P=e−TΔt​
  • 特殊情况:若概率不随时间变化,而是常数,则随机化贪心。
③蚁群算法

是另一种跳出局部最优的算法,及时答案更优也不一定接受。

  • 选取初始状态;
  • 向周围扩展,以高概率选取信息素最大的结点,以低概率随机选取;
  • 没有信息素时,可以判断局部状态,也可以完全随机;
  • 以一定规则添加和删除信息素。

禁忌搜素:由于搜索过的路径再搜一次意义不大,所以要以更低的概率进入走过的状态。

④遗传算法

上述两种解法的结合。

直接合并:合并每一组变量,随机选择/取平均值。

间接合并:合并搜索的参数、中间状态

种群:由一定的个体组成

个体的产生:遗传/变异

遗传通过已有的个体合并得到,变异有低概率发生,产生新的个体。

个体的消失:淘汰。通过评估函数,淘汰最差的个体。

星露谷物语

在二维平面上,找到一条长度最小的环形路径,使得它覆盖给出的 n 条有向线段。可以分多次走一条线段。

  • 测试点1-2:所有有向线段构成一个环。

数据规模较小,任选一个线段作为起点以及终点,重复n遍遍历所有线段即可。

  • 测试点3-7:所有有向线段随机分布,且长度不超过2\sqrt22​

    3,4,5可以随机枚举一个排列,然后爬山算法,不需要太多次数也能通过

    6,7用TSP求出遍历所有线段的最优顺序

  • 测试点8-10:所有有向线段形成若干个“团”,每个团有200条有向线段

​ 10求出遍历“团”的最优顺序,并按照这个顺序重新排序所有团,在团内部按原顺序输出即可。8、9还需要优化团内部线段的顺序。

WC2015未来程序

这道题会给你程序和输入,让你求输出。

  • testdata1:求a*b%c,使用ull快速乘即可。
  • testdata2:矩阵快速幂优化递推。
  • testdata3:自然数幂求和,但需要消gcd,并且特判5的倍数。
  • testdata4:给一个01矩阵,每个1最近的0的曼哈顿距离之和。对每个1按路径方向DP4次取最小值实现转移。
  • testdata5:给定01矩阵,求有多少全1的子矩阵。单调栈维护梯形面积,
  • testdata6:Brent判圈。
  • testdata7:数独字母版,爆搜即可。
  • testdata8:组合数学。OEIS即可(×
  • testdata9:给定答案的MD5加密,暴力解密
  • testdata10:统计独立宣言里面每个字母出现了多少次
牛客32523.M NULL

这是我们校赛的题目,作为提交答案型比较简单,大家可以尝试一下。

  • testdata1:直接输出给定的字符串
  • testdata2:输出114514个问号,问号个数拉到编辑器就知道有多少个了。
  • testdata3:第一行提示,接下来100000行2imod9982443532^i \mod 9982443532imod998244353
  • testdata4:第一行提示,求2~5000000哪些是质数哪些不是
  • testdata5:第一行提示,输出300*300的数对和他们的异或结果
  • testdata6:第一行提示,斐波那契的平方项项数取模,容易发现有循环节可以直接打表。
  • testdata7:打表记录每段01的长度,然后循环输出即可。
  • testdata8:判断3*3的幻方是否合法,直接枚举判断即可
  • testdata9:不(略)难看出是4*4的扫雷地图,直接计算每个格子附近的雷数输出即可
  • testdata10:字典随机输出,因为答案单词个数不到36种,可以小写字母或者数字代替单词记录,最后打表得出答案。

总结

这种题型要么一些题目会有专门的checker程序检查你输出的答案是否正确,要么是给定你超过打表范围长度的答案让你写程序去输出。提交答案型题目出现的不多,遇到了基本上是黑题的难度,我也不再继续深究了,谨以此博客作为学习标记。

参考资料

提交答案型题目解题方法-赵金昊

https://www.luogu.com.cn/blog/da32s1da/wc2015-wei-lai-cheng-xu

【算法学习笔记/杂项】提交答案型题目相关推荐

  1. 算法学习笔记:网络流#4——ISAP 求解最大流

    算法学习笔记:网络流#4--ISAP 求解最大流 1. 前言 2. 模板 2.1 详解 2.2 正确性证明 2.3 代码 3. 算法对比 3.1 一般数据下的对比 3.2 特殊数据下的对比 4. 总结 ...

  2. 数据结构与算法学习笔记4:递归+分治法

    数据结构与算法学习笔记4 递归 斐波那契数列 青蛙跳台阶问题 链表倒序打印 分治法 二分查找/折半查找 Binary Search 题目1:快速幂 题目2:如何判断一个数是否为2的次幂 递归 指在函数 ...

  3. 领扣网算法学习笔记 - 215

    领扣网算法学习笔记 本系列的算法题目来自领扣网 数组类算法第六天 题目:数组中的第K个最大元素 在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 ...

  4. l2-004 这是二叉搜索树吗?_算法学习笔记(45): 二叉搜索树

    二叉搜索树(Binary Search Tree, BST)是一种常用的数据结构,在理想情况下,它可以以 的复杂度完成一系列修改和查询,包括: 插入一个数 删除一个数 查询某数的排名(排名定义为比该数 ...

  5. 两个字符串的最长公共子序列长度_算法学习笔记(58): 最长公共子序列

    (为什么都更了这么多篇笔记了,这时候才讲这么基础的内容呢?因为我本来以为LCS这种简单的DP不用讲的,结果CF不久前考了LCS的变式,然后我发现由于自己对LCS一点都不熟,居然写不出来 ,于是决定还是 ...

  6. 【基础】基础算法学习笔记(状态空间)

    基础算法学习笔记(状态空间) 一.状态空间 1.定义(什么是状态空间):一个实际问题的各种可能情况构成的集合.(解释:为什么需要算法来和程序来处理问题?如果一道题可以手算得到答案,换句话说就是存在通过 ...

  7. Python最优化算法学习笔记(Gurobi)

    微信公众号:数学建模与人工智能 github地址:https://github.com/QInzhengk/Math-Model-and-Machine-Learning Python最优化算法学习笔 ...

  8. 数据结构与算法学习笔记——链栈

    数据结构与算法学习笔记(C语言) 链栈 在开始链栈的学习之前,我们先实现一下上一篇文章中提到的检查括号匹配的小程序,鉴于水平有限,本人就随便写一下代码好了,目标仅限于对功能的实现. /*用顺序栈这种数 ...

  9. 数学建模算法学习笔记

    数学建模算法学习笔记 作为建模Man学习数学建模时做的笔记 参考文献: <数学建模姜启源第四版> 网上搜罗来的各种资料,侵删 1.线性预测 levinson durbin算法,自相关什么的 ...

最新文章

  1. 第一阶段:前端开发_Mysql——多表查询
  2. c语言位运算负数的实例_一招教你学会C语言中位运算
  3. javaweb关于用户是否登录全局判断,没有登录跳转到登录界面
  4. 使用QT-QSerialport打不开串口的原因
  5. RESTful API 设计指南[转]
  6. 基于python的性能测试工具–locust
  7. 在Visual Studio中使用T4 Templates 生成代码
  8. 百度地图设置显示定位服务器,百度地图后台持续定位
  9. ArcMAP中如何将16位保存的卫星底图,转变为8位表示
  10. ES7 设置磁盘使用率水位线 allocation.disk.watermark
  11. 编码——隐匿在计算机软硬件背后的语言
  12. Hadoop基础教程之搭建开发环境及编写Hello World
  13. MATLAB 2020b版本发布,下载试用版并上手使用记录。
  14. Java全栈开发---Java ERP系统开发:商业ERP(十三)CXF框架,物流BOS系统开发
  15. SIGAR - System Information Gatherer And Reporter
  16. QQ城市达人接口编程及经验分享2--新接口
  17. 随便谈谈我的实习经历
  18. Eclipse 各种设置
  19. Visual studio 无法下载安装
  20. wms仓库管理系统的订单处理及流程

热门文章

  1. 今日头条发起创建话题,怎么设置头像和描述
  2. 【转载】提高Ubuntu虚拟机运行速度
  3. 18、HTML复选框checkbox
  4. 计算机基础知识得分公式,全国计算机等级考试一级MS Office是怎样算分数的
  5. 百分点大数据技术团队:基于HugeGraph的知识图谱技术在白酒行业的落地实践
  6. linux交叉编译hisi3559项目
  7. python数字转字符串
  8. 【文献阅读】了解目前DL在生态学领域的应用2
  9. 2023 EMOJI表情包合成微信小程序源码
  10. c++ 字符串与数字相互转换