3 条题解
-
2
首先一眼题可以想到是差分+排序,每一次操作都排,但说实话不见得每次排序把所有元素全部排一遍,前面是0的可以忽略不计,因为不管怎么排,0始终在前面,所以只需要排后面的非零元素就好啦,然后上个代码:
#include <bits/stdc++.h> using namespace std; const int N = 1e5 + 10; int a[N]; int main() { int t; scanf("%d", &t); while (t--) { int n; scanf("%d", &n); int ans = n; for (int i = 1; i <= n; i++) { scanf("%d", &a[i]); } for (int i = 1; i <= n; i++) { if (a[i] != 0) { ans = i - 1; break; } } if (ans == 0) { ans = 1; } while (n > 1) //找第一个不为0的位置的前一个位置,因为如果是0的话,那相减还是0,排序后还是在最前面,排了也没用 { for (int i = ans; i <= n; i++) { a[i] = a[i + 1] - a[i]; } --n; sort(a + ans, a + 1 + n); if (ans > 1) { ans--; } while (ans + 1 <= n && a[ans + 1] == 0) { ++ans; } } printf("%d\n", a[1]); } return 0; }
信息
- ID
- 817
- 时间
- 2000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- 递交数
- 332
- 已通过
- 28
- 上传者