8 solutions
-
0
题目分析:
首先,这题我们可以知道,擦掉的数组元素顺序不同,最后剩的值的大小也不同。
所以我们现在需要确定的是我们要怎么才能得到最小值和最大值
由其他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
- 149
- Accepted
- 53
- Uploaded By