CSP 2021 S2(提高组第二轮)江西自造数据的全省选手分数

声明:这是自测,非官方排名!

为了能更快的评测出全省191名选手代码的相应分数,所以前面3题每题只造了10组数据,否则有些题如果造25组数据,碰到TLE的代码将会极大地影响到评测速度。

测了一个小时,最后评测出的结果共有61位选手爆0,最高分是330分。部分排名如下所示:

CSP 2021 S2(提高组第二轮)江西自造数据的全省选手分数_第1张图片

1.airport

对于小数据采用随机数据,对于大数据,比如n=50000,m1=99999,m2=1,采取的造数据策略是造m1个如下规律的区间[1,199998],[2,199997],[3,199996]......

这样可以避免n,m1,m2比较大的时候,随机数据造成的输出都是m1+m2,导致被一些程序骗分。

gen.cpp如下:

#include
using namespace std;
const int N=1000005;
int a[N];
void make(int n,int m1,int m2)
{
	for(int i=1;i<=(m1+m2)*2;i++) a[i]=i;
	for(int i=1;i<=(m1+m2)*2;i++)
	{
		swap(a[1],a[rand()%((m1+m2)*2)+1]);
	}
	cout<r) swap(l,r);
		cout<r) swap(l,r);
		cout<

2.bracket

这道题的数据还算比较好造的,先生成n个"?"组成的字符串,然后将其中的一些位置替换成"(","*"即可,注意,不要让首尾替换成"*"或者"(",否则肯定非法,导致输出为0会被一些选手骗分,我这里生成的策略是不让前两位和后两位替换成"*"或者"(",gen.cpp如下:

#include
using namespace std;
const int N=1000005;
int a[N];
void make(int n,int k)
{
	cout<=n-2) t=rand()%n;
	s[t]='(';
	for(int i=1;i<=5;i++) 
	{
		int t1=rand()%n;
		while(t1==t||t1<=2||t1>=n-2) t1=rand()%n;
		s[t1]='*';
	}
	cout<

3.palin

生成的策略是先初始化一个回文数组,然后将这个回文数组随机放到双端队列,最后依次从双端队列依次取出即可,这样保证有答案,防止随机数据都是-1被选手骗分。gen.cpp如下:

#include
using namespace std;
const int N=1000005;
int a[N];
dequeq;
void make(int t,int n)
{
	cout<=1;i--)
		{
			if(rand()%2==0) q.push_front(a[i]);
			else q.push_back(a[i]);
		}
		for(int i=1;i<2*n;i++) cout<

4.traffic

时间关系,懒得造了,直接拿官方附件,然后手动改了一些输入中的权值,然后拿标程跑,得到和官方不一样的输出,防止被一些选手以特判样例的形式骗分。

完整的数据和排名榜单资源下载:

链接:https://pan.baidu.com/s/1T3LJ3Xuw2P-GYQss51g2vg 
提取码:6666

你可能感兴趣的:(信息学竞赛2024届,c++,1024程序员节)