From: ouuan Date: Thu, 3 Oct 2019 09:04:13 +0000 (+0800) Subject: :speech_balloon: update docs/topic/problemsetting.md X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=5376e14465901681e81c9835300ab1567ce5e797;p=oi-wiki%2Fmain.git :speech_balloon: update docs/topic/problemsetting.md --- diff --git a/docs/topic/problemsetting.md b/docs/topic/problemsetting.md index cb3e3251..5209a2b8 100644 --- a/docs/topic/problemsetting.md +++ b/docs/topic/problemsetting.md @@ -76,10 +76,10 @@ 经典例子: [NOIP2017 小凯的疑惑](http://uoj.ac/problem/329) -我自己的标准是:尽量不要出数学填空题。但这样的纯数学题也不是完全不可取,有时纯粹地考察一些 OI 常用数学知识也是可以接受的。 +OI 中的数学题与其它数学题的区别,也是体现 OI 本质的一个特点,是 OI 中的数学题往往重点不在答案 **是什么**,而在如何 **加快** 答案的计算。如果一道题考察的重点是“怎么算”而非“怎么快速计算”,这样的数学题一般都是不适合出在 OI 中的。 -> 一部分偏题中牵涉到了大学物理的内容,导致选手在面对这些从未接触过的物理知识点时变得不知所措,造成了知识上的隔膜。 -> +> 一部分偏题中牵涉到了大学物理的内容,导致选手在面对这些从未接触过物理知识点时变得不知所措,造成了知识上的隔膜。 +>的 > ——[王天懿《论偏题的危害》][2] 经典例子: [「清华集训 2015」多边形下海](http://uoj.ac/problem/159) @@ -134,11 +134,13 @@ ### 输入输出格式 -输入输出格式清晰 **完整** 即可,没有死板的要求,个人建议参照 CF 的题目来写输入输出格式,具体可以参考[CF 出题人须知][3]。 +输入输出格式清晰 **完整** 即可,没有死板的要求,个人建议参照 CF 的题目来写输入输出格式,具体可以参考 [CF 出题人须知][3]。 + +为了方便选手做题,输入输出格式中最好说明每个变量的具体含义,除非变量的意义非常长,没法一句话说清楚(这时可以说“意义见题目描述”)。 需要特别注意的是,如果输出中含有小数,请尽量使用 SPJ。如果无法使用 SPJ,请保证对精度的要求是有限的。 -如果没有保证,对精度的要求可能是无限的。例如:要求保留三位小数,实际答案为 $0.0015$ ,此时只要有任意大小的误差导致计算出的答案小于 $0.0015$ ,即使计算出的答案是 $0.0014999999999\cdots$ 也会输出错误的答案。 +如果没有保证,对精度的要求可能是无限的。例如:要求保留三位小数,实际答案为 $0.0015$ ,此时只要有任意大小的误差导致计算出的答案小于 $0.0015$ ,即使计算出的答案是 $0.00149999\cdots$ 也会输出错误的答案。 保证对精度要求有限的例子:请输出答案四舍五入后保留小数点后三位的结果。令标准答案为 $ans$ ,数据保证对于任意满足 $\frac{|x-ans|}{\max(1,ans)}<10^{-9}$ 的 $x$ ,四舍五入后结果与 $ans$ 四舍五入后相同。 @@ -194,7 +196,7 @@ 4. 实数没说小数点后位数。 5. 某些变量没有给范围。 -你需要保证标程可以通过满足题面所述数据范围的任何一组数据。 +你需要保证标程可以通过满足题面所述数据范围的 **任何一组数据**。 ### 样例 @@ -277,6 +279,8 @@ for (int i = 1; i <= n; ++i) { } ``` +如果使用 `testlib.h`,可以使用 `shuffle` 函数,和 `random_shuffle` 类似,但使用 `rnd.next` 作为随机数生成器。 + #### 生成随机区间 常见错误方法:在 $[1,n]$ 中随机生成左端点 $l$ ,再在 $[l, n]$ 中随机生成右端点 $r$ 。这样的话生成的区间会比较靠右。 @@ -351,7 +355,6 @@ int main(int argc, char* argv[]) { for (i = 1; i <= n; ++i) p.push_back(i); shuffle(p.begin(), p.end()); - // testlib.h 自带的用于替代 random_shuffle 的函数 // 使用 rnd.next() 进行 shuffle printf("%d %d %d\n", n, m, k);