题目
题意:给定一组石堆,每次操作:选择下标
1
<
=
i
<
j
<
k
<
=
n
,
a
j
>
=
2
1<=i
思路:保证 a 2 , . . . , a n − 1 a_2,...,a_{n-1} a2,...,an−1有一个大于1的数即可。特判,n=3时, a 2 a_2 a2要为偶数。
#includeusing namespace std; #define ll long long const int maxn = 200010; int t; int a[maxn], n; void solve() { scanf("%d", &n); for (int i = 0; i < n; ++i) { scanf("%d", &a[i]); } ll ans = -1; for (int i = 1; i < n - 1; ++i) { if (a[i] > 1) { ans = 0; } } if (ans == -1 || (n == 3 && (a[1] & 1))) { printf("-1n"); return; } for (int i = 1; i < n - 1; ++i) { ans += (a[i] + 1) / 2; } printf("%lldn", ans); } int main() { scanf("%d", &t); while (t--) { solve(); } }



