信息学竞赛打表犯规吗?

作者 : 开心源码 本文共1397个字,预计阅读时间需要4分钟 发布时间: 2022-05-12 共214人阅读

首先很明确地告诉你:打表不犯规。
所谓打表,就是直接把答案写出来。这里举两个例子。
(1)NOIP 2018普及组复赛第3题:摆渡车。这道题的数据规模明确商定,10%的数据m = 1,如果你能看懂题意,那么你自然就会发现m = 1时,结果必然为0。如果你这道题完全没有思路,那么你可以这样写代码:

#include <iostream>using namespace std;int main(){    freopen("bus.in", "r", stdin);    freopen("bus.in", "w", stdin);    int n, m;    cin >> n >> m;    int a[n];    for(int i = 0; i < n; i++)    {        cin >> a[i];    }        if(1 == m)    {        cout << 0;    }    else    {        // 我不会做    }    return 0;}

这段代码可以进一步简化为:

#include <iostream>using namespace std;int main(){    freopen("bus.in", "r", stdin);    freopen("bus.in", "w", stdin);    cout << 0; // 无论数据多少,我全部输出0    return 0;}

这两个程序,随意写一个,都可以得到10%的分数。可见就算题目不会做,有时通过打表也可以得到部分分数。
我的了解是出题者在这里成心送10%的分数给考生。

(2)求素数。通常情况下你会这么写代码:

bool isprime(int x){    if(x <= 1)    {        return false;    }        int root = sqrt(x);    for(int i = 2; i <= root; i++)    {        if(0 == x % i)        {            return false;        }    }        return true;}

如果题目说了x不会超过30,那么你可以不用写上面这些代码,直接打表:

prime[2] = prime[3] = prime[5] = prime[7] = prime[11] = prime[13] = prime[17] = prime[19] = prime[23] = prime[29] = true;

这里用了打表,可以稍微提升效率。

(3)求2000!末尾0的个数。
这道题按常规的方法,是要判断有多个5、52、53、……、5^n;从而求出2000!末尾有多少个0。但是有些人,一眼看出这道题的答案是499,则可以打表:

#include <iostream>using namespace std;int main(){    cout << 499;    return 0;}

从根本上说,你在考场里写的代码,除了你本人之外,不会有第二个人去看。由于判卷不是人判的,而是由评分电脑判的。机器会给你的程序输入若干组数据(通常是10组或者20组),你的程序会输出相应的结果;评分电脑再把你的输出结果与标准答案相比较,对了几组就给你多少分。比方10组数据,你对了8组,就得80%的分数。评分电脑是不关心你的程序怎样写的。

所以,打表是一种编程技巧,不存在违规的问题。当然有些同学会将这种行为称做“骗分”行为,这只是一种自黑的说法。其实无所谓骗分不骗分,技巧而已。多数情况下,有条件打表的题目,通过打表通常也只能得到一小部分的分数,这是在不会做的前提下采用的一种无奈行为。

那么,哪些行为才是违规的呢?只有在《考试注意事项》里规定的违规行为,才是违规行为,比方带手机进考场。

理解少儿编程、信息学竞赛请加微信307591841或者QQ群581357582信息学竞赛公众号.jpg

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 信息学竞赛打表犯规吗?

发表回复