列表

详情


NC248194. 先交换

描述

给定一个长度为 n 的数组 a,下标从 1 开始,可以进行以下操作:


问最少多少次操作后 a_1 为奇数。

若无论多少次操作和都无法使得 a_1 为奇数,则输出 -1。

输入描述

每一个测试点包含多组测试数据,第一行输入一个正整数 ,表示该测试点测试数据的数量。

对于每组测试数据:

第一行输入一个正整数

第二行输入 n 个整数以空格相隔,第 i 个整数表示

输出描述

对于每组测试数据,一行输出一个整数,表示最少的操作次数使得 a_1 为奇数,若无解则输出 -1。

示例1

输入:

3
3
1 2 3
2
0 1
2
2 1

输出:

0
-1
1

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

Java 解法, 执行用时: 597ms, 内存消耗: 20812K, 提交时间: 2023-08-13 13:40:18

import java.util.Scanner;

public class Main {
	public static void main(String agrs[]) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		for(int i=1;i<=n;i++) {
			int m = sc.nextInt();
			int a []= new int [m];
			for(int j=0;j<m;j++) {
				a[j]=sc.nextInt();
			}
			int num=0;
			while(a[0]%2!=1) {
				boolean is=false;
				for(int k=1;k<m;k++) {
					if(a[k]<a[0]&&a[k]%2==1) {
						num=1;
						is = true;
						break;
					}
				}
				if(is)break;
				else {
					num=-1;
					break;
				}
			}
			System.out.println(num);
		}
	}
}

Python3 解法, 执行用时: 97ms, 内存消耗: 4628K, 提交时间: 2023-08-13 13:39:36

n=int(input())
for _ in range(n):
    input()
    a=list(map(int,input().split()))
    if a[0]%2:
        print(0)
        continue
    b=a[1:]
    f=0
    for i in b:
        if i%2 and i<a[0]:
            f=1
    print(1 if f else -1)

上一题