每个测试文件均包含多组测试数据。第一行输入一个整数
代表数据组数,每组测试数据描述如下:
第一行输入一个整数
代表卡牌种类数。
第二行输入
个整数
代表每种卡牌数量。
除此之外,保证每一组测试数据的卡牌总数之和不小于
;单个测试文件的
之和不超过
。
对于每一组测试数据,如果没有必胜策略,直接输出
;否则,在单独的一行上输出一个整数,代表你至少需要预知多少张卡牌,才能保证你不会输。
3 2 1 1 1 10 2 2 3
0 -1 3
对于第一组测试数据,只有两张卡牌,且各不相同,直接翻开即可。
对于第二组测试数据,由于卡牌种类唯一,不管怎么翻都会输。
T = int(input()) for i in range(T): n = int(input()) p = list(map(int,input().split())) if n==1: print(-1) else: if sum(p)==max(p)+n-1:#“除最大堆外,所有其他卡牌数量均为 1” print(max(p)-1)#随机预知k张;①预知的选一张,剩余的选一张。②预知的里面选两种 else: print(max(p))#①预知的选一张,剩余的选一张。②预知的里面选两种,k张牌中必然包含两种(对应②),或者只为数量最多的牌(对应①)。
import java.util.Scanner;
import java.util.Arrays;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextInt()) { // 注意 while 处理多个 case
int T = in.nextInt();
in.nextLine();
for(int i = 0;i < T;i++){
int n = in.nextInt();
in.nextLine();
int[] arr = new int[n];
for(int j = 0;j < n;j++){
arr[j] = in.nextInt();
}
in.nextLine();
if(n == 1){
System.out.println("-1");
}else{
int tmp = 0;
for(int k = 0;k < arr.length;k++){
if(arr[k] == 1){
tmp++;
}
}
if(tmp == arr.length){
System.out.println("0");
}else{
Arrays.sort(arr);
int num = 0;
for(int l = 0;l < arr.length;l++){
if(arr[l] == 1){
num++;
}
}
if(num == arr.length - 1){
System.out.println(arr[arr.length - 1] - 1);
}else{
System.out.println(arr[arr.length - 1]);
}
}
}
}
}
in.close();
}
} #include <algorithm>
#include <iostream>
#include <mutex>
#include <set>
#include <vector>
using namespace std;
int main() {
int T;
cin >> T;
while (T--) {
int n;
cin >> n;
vector<int> vec;
int m;
int n_cpy = n;
while (n--) {
cin >> m;
vec.push_back(m);
}
if ( n_cpy == 1 ) {
cout << -1 << endl;
} else {
int one_number = 0;
for (int i : vec) {
if ( 1 == i ) {
one_number++;
}
}
if ( one_number == vec.size() ) {
cout << 0 << endl;
} else if( one_number == vec.size() - 1 ) {
cout << *max_element(vec.begin(), vec.end()) - 1 << endl;
}else {
cout << *max_element(vec.begin(), vec.end()) << endl;
}
}
}
}
// 64 位输出请用 printf("%lld") const rl = require("readline").createInterface({ input: process.stdin });
const iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void (async function () {
const data = [];
while ((line = await readline())) {
data.push(line);
}
const count = Number(data.shift());
for (let i = 0; i < count; i++) {
const total = Number(data.shift());
const arr = data
.shift()
.split(" ")
.map((item) => Number(item));
if (total === 1) {
console.log(-1);
} else {
const sum = arr.reduce((pre, cur) => cur + pre, 0);
console.log(sum - total);
}
}
})();