time limit per test
1 second
memory limit per test
256 megabytes
An array aa is good if for all pairs of adjacent elements, aiai and ai+1ai+1 (1≤i<n1≤i<n) are of different parity. Note that an array of size 11 is trivially good.
You are given an array of size nn.
In one operation you can select any pair of adjacent elements in which both elements are of the same parity, delete them, and insert their product in the same position.
Find the minimum number of operations to form a good array.
Input
Each test contains multiple test cases. The first line contains the number of test cases tt (1≤t≤5001≤t≤500). The description of the test cases follows.
The first line of each test case contains an integer nn (1≤n≤1001≤n≤100).
The second line of each test case contains nn integers a1,a2,...,ana1,a2,...,an (1≤ai≤1091≤ai≤109).
Output
For each test case print an integer, the minimum number of operations required to form a good array.
Example
Input
Copy
3
5
1 7 11 2 13
4
1 2 3 4
6
1 1 1 2 2 3
Output
Copy
2
0
3
Note
Consider the first test case. Select the 22-nd and the 33-rd integers and apply the operation on them. The array changes from [1,7,11,2,13][1,7,11,2,13] to [1,77,2,13][1,77,2,13]. Next, select the 11-st and the 22-nd integers, array changes from [1,77,2,13][1,77,2,13] to [77,2,13][77,2,13]. Thus we require 22 operations. It can be proved that this is the minimum number of operations.
In the second test case, the given array is already good. So we require 00 operations.
解题说明:此题是一道数学题,需要保证连续两个元素奇偶性不同,直接遍历数列,找出存在相同奇偶性的二元组即可。
cpp
#include<stdio.h>
int main()
{
int t;
scanf("%d", &t);
while (t--)
{
int n, i;
scanf("%d", &n);
long long int a[101];
int ans = 0;
for (i = 0; i < n; i++)
{
scanf("%lld", &a[i]);
}
for (i = 0; i < n - 1; i++)
{
if ((a[i] % 2 == 1 && a[i + 1] % 2 == 1) || (a[i] % 2 == 0 && a[i + 1] % 2 == 0))
{
ans++;
}
}
printf("%d\n", ans);
}
return 0;
}