问题描述

  闲暇时,福尔摩斯和华生玩一个游戏:

  在N张卡片上写有N个整数。两人轮流拿走一张卡片。要求下一个人拿的数字一定是前一个人拿的数字的约数或倍数。例如,某次福尔摩斯拿走的卡片上写着数字“6”,则接下来华生可以拿的数字包括:

  1,2,3, 6,12,18,24 …

  当轮到某一方拿卡片时,没有满足要求的卡片可选,则该方为输方。

  请你利用计算机的优势计算一下,在已知所有卡片上的数字和可选哪些数字的条件下,怎样选择才能保证必胜!

  当选多个数字都可以必胜时,输出其中最小的数字。如果无论如何都会输,则输出-1。

输入格式

  输入数据为2行。第一行是若干空格分开的整数(每个整数介于1~100间),表示当前剩余的所有卡片。

  第二行也是若干空格分开的整数,表示可以选的数字。当然,第二行的数字必须完全包含在第一行的数字中。

输出格式

  程序则输出必胜的招法!!

样例输入

2 3 6

3 6

样例输出

3

样例输入

1 2 2 3 3 4 5

3 4 5

样例输出

4

import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner; public class Main { public int dfs(int[] numA, ArrayList<Integer>[] listA, int start) {
for(int i = listA[start].size() - 1;i >= 0;i--) {
if(numA[listA[start].get(i)] > 0) {
numA[listA[start].get(i)]--;
int t = dfs(numA, listA, listA[start].get(i));
numA[listA[start].get(i)]++;
if(t == -1)
return 1;
}
}
return -1;
} public void getResult(String A, String B) {
int[] numA = new int[105];
@SuppressWarnings("unchecked")
ArrayList<Integer>[] listA = new ArrayList[105];
for(int i = 1;i < 105;i++)
listA[i] = new ArrayList<Integer>();
ArrayList<Integer> listB = new ArrayList<Integer>();
String[] arrayA = A.split(" ");
String[] arrayB = B.split(" ");
for(int i = 0;i < arrayA.length;i++) {
int a = Integer.valueOf(arrayA[i]);
numA[a]++;
}
for(int i = 1;i <= 100;i++) {
if(numA[i] != 0) {
numA[i]--;
for(int j = 1;j <= 100;j++)
if(numA[j] != 0 && (i % j == 0 || j % i == 0))
listA[i].add(j);
numA[i]++;
}
}
for(int i = 0;i < arrayB.length;i++) {
int b = Integer.valueOf(arrayB[i]);
listB.add(b);
}
Collections.sort(listB);
for(int i = 0;i < listB.size();i++) {
numA[listB.get(i)]--;
int t = dfs(numA, listA, listB.get(i));
numA[listB.get(i)]++;
if(t == -1) {
System.out.println(listB.get(i));
return;
}
}
System.out.println("-1");
return;
} public static void main(String[] args) {
Main test = new Main();
Scanner in = new Scanner(System.in);
String A = in.nextLine();
String B = in.nextLine();
test.getResult(A, B);
}
}

Java实现 蓝桥杯 历届试题 约数倍数选卡片的更多相关文章

  1. 蓝桥杯 历届试题 约数倍数选卡片 (经典数论+DFS)

    闲暇时,福尔摩斯和华生玩一个游戏: 在N张卡片上写有N个整数.两人轮流拿走一张卡片.要求下一个人拿的数字一定是前一个人拿的数字的约数或倍数.例如,某次福尔摩斯拿走的卡片上写着数字“6”,则接下来华生可 ...

  2. 算法笔记_184:历届试题 约数倍数选卡片(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 闲暇时,福尔摩斯和华生玩一个游戏: 在N张卡片上写有N个整数.两人轮流拿走一张卡片.要求下一个人拿的数字一定是前一个人拿的数字的约数或倍数 ...

  3. Java实现蓝桥杯 历届试题 k倍区间

    历届试题 k倍区间 时间限制:2.0s 内存限制:256.0MB 问题描述 给定一个长度为N的数列,A1, A2, - AN,如果其中一段连续的子序列Ai, Ai+1, - Aj(i <= j) ...

  4. Java实现蓝桥杯历届试题分考场

    历届试题 分考场 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 n个人参加某项特殊考试. 为了公平,要求任何两个认识的人不能分在同一个考场. 求是少需要分几个考场才能满足条件. 输 ...

  5. Java实现蓝桥杯历届试题兰顿蚂蚁

    历届试题 兰顿蚂蚁 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种. 平面上的正方形格子被填上黑色或白色.在其 ...

  6. Java实现蓝桥杯历届试题回文数字

    历届试题 回文数字 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 观察数字:12321,123321 都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的.这样的数字叫做: ...

  7. Java实现蓝桥杯历届试题高僧斗法

    历届试题 高僧斗法 时间限制:1.0s 内存限制:256.0MB 提交此题 锦囊1 锦囊2 问题描述 古时丧葬活动中经常请高僧做法事.仪式结束后,有时会有"高僧斗法"的趣味节目,以 ...

  8. Java实现蓝桥杯历届试题买不到的数目

    历届试题 买不到的数目 时间限制:1.0s 内存限制:256.0MB 提交此题 锦囊1 锦囊2 问题描述 小明开了一家糖果店.他别出心裁:把水果糖包成4颗一包和7颗一包的两种.糖果不能拆包卖. 小朋友 ...

  9. Java实现 蓝桥杯 历届试题 斐波那契

    试题 历届试题 斐波那契 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 斐波那契数列大家都非常熟悉.它的定义是: f(x) = 1 - (x=1,2) f(x) = f(x-1) ...

随机推荐

  1. AFNetworking 3.0 使用详解 和 源码解析实现原理

    AFN原理&& AFN如何使用RunLoop来实现的: 让你介绍一下AFN源码的理解,首先要说说封装里面主要做了那些重要的事情,有那些重要的类(XY题) 一.AFN的实现步骤: NSS ...

  2. Struts2-Tiles 2.5.2 升级指南和通配符拓展

    最近工程从Struts2.3.18升级Struts2.5.2导致相关联的插件都需要升级到相同版本,其中tiles的变化最大. 1.web.xml上 listener org.apache.struts ...

  3. java调用oracle存储过程返回多条结果集

    oracle版本:11g oracle存储过程,使用游标的方式返回多行.多列数据集合: CREATE OR REPLACE PROCEDURE SP_DATA_TEST( /*P_ID IN INT, ...

  4. ES6,ES7,ES8 常用

    ES6常用新特性 let && const let 命令也用于变量声明,但是作用域为局部 { let a = 10; var b = 1; } 在函数外部可以获取到b,获取不到a,因此 ...

  5. Linux系统中如何升级pip

    问题提出:在Linux系统下安装python的logging库时提示以下信息 经过一番折腾,定位在pip版本过低和setuptools版本过低上 一.Linux下更新包 sudo python3 -m ...

  6. Scrapy 框架 入门教程

    Scrapy入门教程 在本篇教程中,我已经安装好Scrapy 本篇教程中将带您完成下列任务: 创建一个Scrapy项目 定义提取的Item 编写爬取网站的 spider 并提取 Item 编写 Ite ...

  7. redis python操作

    1.基于连接池方式实现对五个数据类型操作,每种数据类型2个操作 2.基于spring-data-redis 基于jedis来实现对五种数据类型操作,每种数据类型实现两个操作,包括事务 以上为基于jav ...

  8. webpack 3 升级 webpack4 个人笔记

    参考文章: 1. webpack4升级完全指南 https://segmentfault.com/a/1190000014247030 2. Mobx useStrict is not a funct ...

  9. Spring 注入内部 Beans

    注入内部 Beans inner beans 是在其他 bean 的范围内定义的 bean. 下面是一个基于setter注入的内部 bean 进行配置的配置文件 Beans.xml 文件: <? ...

  10. TP5.0登录验证码实现

    <div class="loginbox-textbox"> <input class="form-control" placeholder= ...