建议加强数据
查看原帖
建议加强数据
678625
shicj楼主2023/9/3 20:21

题目中有句话叫注意:比赛绝对不会让参赛者赔钱!,但没有这种情况,不特判也能过,有一些题解就存在这种问题,比如这个代码(下面)(第一篇题解)中,他没有特判,而且他的罚款应该是不用标记的,标记后可能失去最优解.

#include<cstdio>
#include<algorithm>
using namespace std;
int hash[5000001]; 
struct ben
{
	int x,y;
}a[501];
int cmp(const ben &a,const ben &b)
{
	return a.y>b.y;
}
int main()
{
	int m,n;
	scanf("%d%d",&m,&n);
	for(int i=1;i<=n;i++)scanf("%d",&a[i].x);//完成期限
	for(int i=1;i<=n;i++)scanf("%d",&a[i].y);//罚款
	sort(a+1,a+n+1,cmp);//按照罚款数额从大到小进行选择排序
	int bj=0;
	int s=0;
	for(int i=1;i<=n;i++)
	{
		bj=1;
		for(int j=a[i].x;j>=1;j--)
		{
			if(hash[j]==0)
			{
				bj=0;
				hash[j]=1;
				break;
			}
		}
		if(bj==1)//要罚款
		{
			for(int k=n;k>=1;k--)
			{
				if(hash[k]==0)
				{
					hash[k]=1;
					break;
				}
			}
			s+=a[i].y;//累加罚款
		}
	}
	printf("%d",m-s);
	return 0;
}

//转载于https://www.luogu.com.cn/blog/ShineEternal/solution-p1230

Hack数据1(针对特判):

0
5
1 1 1 1 1
100 100 100 100 100

正确的输出:

0

上面的程序输出:

-400

没特判,显然错了


针对标记的Hack数据我暂时想不出(有可能上面的做法可以)


希望加强样例!

@小粉兔

2023/9/3 20:21
加载中...