社区讨论

蒟蒻求问,我这种贪心加排序的策略有怎么样的例子会输出错误

P2392kkksc03考前临时抱佛脚参与者 3已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@lo2pb1ue
此快照首次捕获于
2023/10/23 17:34
2 年前
此快照最后确认于
2023/10/23 17:34
2 年前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
int a[30],b[30],c[30],d[30];
bool cmp(int x,int y)
{
	if(x>y)
	{
		return 1;
	}
	else
	{
		return 0;
	}
}
int main()
{
	int s1,s2,s3,s4,l=0,num=0;
	scanf("%d%d%d%d",&s1,&s2,&s3,&s4);
	for(int i=1;i<=s1;i++)
	{
		scanf("%d",&a[i]);
		
	}
	for(int i=1;i<=s2;i++)
	{
		scanf("%d",&b[i]);
	}
	for(int i=1;i<=s3;i++)
	{
		scanf("%d",&c[i]);
	}
	for(int i=1;i<=s4;i++)
	{
		scanf("%d",&d[i]);
	}
	sort(a+1,a+1+s1,cmp);
	sort(b+1,b+1+s2,cmp);
	sort(c+1,c+1+s3,cmp);
	sort(d+1,d+1+s4,cmp);
	for(int i=1;i<=s1;i++)
	{
		if(a[i]>l)
		{
			l=a[i]-l;
			num+=l;
		}
		else if(a[i]==l)
		{
			l=0;
		}
		else if(a[i]<l)
		{
			l=l-a[i];
		}
	}
	l=0;
	for(int i=1;i<=s2;i++)
	{
		if(b[i]>l)
		{
			l=b[i]-l;
			num+=l;
		}
		else if(b[i]==l)
		{
			l=0;
		}
		else if(b[i]<l)
		{
			l=l-b[i];
		}
	}
	l=0;
	for(int i=1;i<=s3;i++)
	{
		if(c[i]>l)
		{
			l=c[i]-l;
			num+=l;
		}
		else if(c[i]==l)
		{
			l=0;
		}
		else if(c[i]<l)
		{
			l=l-c[i];
		}
	}
	l=0;
	for(int i=1;i<=s4;i++)
	{
		if(d[i]>l)
		{
			l=d[i]-l;
			num+=l;
		}
		else if(d[i]==l)
		{
			l=0;
		}
		else if(d[i]<l)
		{
			l=l-d[i];
		}
	}
	cout<<num;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...