[关闭]
@LittleRewriter 2017-10-08T02:22:38.000000Z 字数 1553 阅读 1034

从命题人的角度谈出题——zhw神犇的出题经验谈

人生经验


出题导论

出题可以掌控他人的秘密
这个题是可做的、是不是一眼题(不是裸题)、以合适的难度合适的算法出现
任何的题目都是不可能爆零的
比如今天的O(n)DP,可以放在D2T3
对于30%的数据,n<=5
对于50%的数据,n<=200
对于80%的数据,n<=2000
对于100%的数据,n<=1e8
也就是说,对于NOIP来说,正解搞不动,暴力分很多。

怎么搞出一道题

从经典题目中改编

最大子矩阵:
1)改变其中k个数
2)改变其中k个数变为相反数

有一个灵感的时候

苦思冥想一个奇怪的东西,找到一个落脚点
1)这个题目是一眼题->继续加强
2)这个题目不可做->放宽条件(缩小数据范围,魔改)

例:由二分思考

有这么一段代码
l=1; r=n; mid=(l+r)/2;
while (l<=r){ if (a[mid]<=m) l=mid+1; else r=mid-1; mid=(l+r)/2;}
是用来二分的,显然当a顺序时,若m在a中出现过,则a[r]=m。
现在a是一个1~n的排列,并且它的顺序被打乱了,求存在多少种排列,使得最终r=k。答案对1e9+7取模。
n,m,k<=10^6。
n,m,k<=10^9。

访
且x+y=logn
答案为
预处理一下1e6、2e6...1e9的阶乘即可

揣摩出题人的意思

题目考察什么问题
题目是否与经典问题相关
这个题目的难度(仅限NOIP)

做题

出题人都会做,我为什么不会做
之所以能做,是因为放宽了条件
之所以不能做,是因为加强条件

例 次大公约数
次大公因数=最大公因数/最小公质因数
枚举a[1]的质因数即可
再一次的变式 k大公约数->不可做

如何命题

树上的命题思路:树套小树,深度为一段区间的点,区间LCA等。
图上的命题思路:每条边以某个概率生成,每次以一定概率走某条边,缩点等。
序列上的命题思路:一段区间,每等差数列位置的区间,a{b{i}}与b{a{i}}构成树套环等。
辅助工具:gcd,max,期望,mex(最小未出现的正整数),sum等。
例:区间开根号向下取整 区间求和
任何一个不超过1e9的数只会经过不超过7次就会到达1,因此最坏7n次
暴力即可

命题中重要的事

你是出题人!
你是出题人!
你是出题人!
你是出题人!
你是出题人!
你是出题人!
你是出题人!
你是出题人!
当你想到一个好的idea,却不会做,不妨将其简化。
如果是一段序列,不妨将其随机。
如果是一棵树,不妨将其随机。
如果是一个矩阵,不妨将其变成黑白矩阵。
如果是一张图,不妨将其变成二分图。
甚至你可以指定一些特殊条件。(例如树的叶子个数,图的点的度数,每个数的大小等)
例如 叶子个数<=20,没有这个限制出题人都不会做

斟酌

作一个能回报社会的出题人

尝试命一道题

新`背包问题

有一个容量为m的背包,有n个物品,每个物品有价值和体积。
放若干物品,使得容量之和不超过m的情况下价值和在模p意义下最大。
n,p<=1000。

dp[i][j]->价值为j,体积最小为多少
那么dp[i+1][(j+v[i])%p]=min(dp[i+1][(j+v[i])%p],dp[i][j]+w[i]);

双端队列

队列首插入、队列尾插入、队列首删除、查询队列元素最大值

劈成两半,左边维护单调队列,右边维护一个栈,然后维护一个后缀最大值
当且仅当栈为空时从队列中删除

命题的意义

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注