8 solutions

  • 0
    @ 2021-10-17 17:35:07

    题目分析:

    首先,这题我们可以知道,擦掉的数组元素顺序不同,最后剩的值的大小也不同。

    所以我们现在需要确定的是我们要怎么才能得到最小值和最大值

    由其他dalao的题解得出:

    每次删两个最大的得到的是最小值

    每次删两个最小的得到的是最大值

    实在想知道证明过程可以点这个链接:https://blog.csdn.net/niuox/article/details/8524457

    代码:

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    int n;
    int a[5003],b[5003];
    bool cmp1(int x,int y)
    {
    	return x > y;
    }
    bool cmp2(int x,int y)
    {
    	return x < y;
    }
    int main()
    {
    	scanf("%d",&n);
    	for(int i = 1;i <= n;i++)
    	{
    		scanf("%d",&a[i]);
    		b[i] = a[i];
    	}	
    	int x1 = n,x2 = n;
     
    	while(x1 > 2)
    	{
    		sort(a + 1,a + x1 + 1,cmp1);
    		a[x1 - 1] = a[x1 - 1] * a[x1] + 1;
     		x1--;
    	}
    	while(x2 > 2)
    	{
    		sort(b + 1,b + x2 + 1,cmp2);
    		b[x2 - 1] = b[x2 - 1] * b[x2] + 1;
    		x2--;
    	}
    	printf("%d",a[1] * a[2] - b[1] * b[2]);
    	return 0;
    }
    

    Information

    ID
    95
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    5
    Tags
    # Submissions
    130
    Accepted
    48
    Uploaded By