IME++ Starters Try-outs 2019
文章目录
题目
提示:以下是本篇文章正文内容,下面案例可供参考
A. Arnon-Degree of Separation
题意:找到一个人到每一个人的中最短距离的最长距离,如果存在不能到达的人就直接输出“=[”反之输出“=]”并输出最短距离
思路:写一个node类,建立一个关于每个人的邻接表,然后对于每一个人进行BFS即可找到最短距离
import java.util.*;
public class M {
static Scanner scanner=new Scanner(System.in);
static Node []nodes;
static Set<Integer>set;
static int ans=0;
static int aa[];//记录数据
public static void main(String[] args) {
int n=scanner.nextInt();//点的个数
int m=scanner.nextInt();//边的个数
nodes=new Node[n+1];
for(int i=1;i<=n;i++) {
nodes[i]=new Node();
}
for(int i=0;i<m;i++) {//直接加边
int v=scanner.nextInt();
int w=scanner.nextInt();
nodes[v].list.add(w);
nodes[w].list.add(v);
}
for(int i=1;i<=n;i++) {
aa=new int [n+1];
Arrays.fill(aa, n+10);
aa[i]=0;
set=new HashSet<Integer>();
Queue<Integer>queue=new LinkedList<>();
queue.add(i);
while(!queue.isEmpty()) {//BFS
int q=queue.remove();
for(int x:nodes[q].list) {
if(aa[x]==n+10) {//表示该点没有到达过
queue.add(x);
aa[x]=Math.min(aa[x], aa[q]+1);
}
}
}
//System.out.println(Arrays.toString(aa));
for(int o=1;o<=n;o++) {
if(aa[o]==n+10) {
System.out.println("=[");
return;
}else {
ans=Math.max(aa[o], ans);
}
}
}
System.out.println("=] "+ans);
}
static class Node{
List<Integer>list;
public Node() {
this.list = new LinkedList<>();
}
}
}
B. Building Bridges
题目
题意:给出两个字符串,找到相同 的字母进行连接,并且每次连接的线不能出现交叉的情况
思路(DP—LCM):LCM模板
AC代码:
public class Main{
static Scanner scanner=new Scanner(System.in);
public static void main(String[] args) {
char a[]=scanner.next().toCharArray();
char b[]=scanner.next().toCharArray();
int max=0;
int dp[][]=new int [a.length+1][b.length+1];
for(int i=1;i<dp.length;i++) {
for(int j=1;j<dp[0].length;j++) {
if(a[i-1]==b[j-1]) {
dp[i][j]=dp[i-1][j-1]+1;
}else {
dp[i][j]=Math.max(dp[i][j-1], dp[i-1][j]);
}
max=Math.max(max, dp[i][j]);
}
}
System.out.println(max);
}
}
C. Coach
题目# B. Building Bridges
题目:有n个队员进行组队,其中一个人可以呆在多个对里面,每个队的总分大于x,且队员的最大评分与最小评分差距小于d,求最多可以组多少个队
思路:由于n<=15数据较小,直接暴力dfs,剪枝就可以
AC代码:
public class M {
static Scanner scanner=new Scanner(System.in);
static long []a;
static int x,d,ans;
public static void main(String[] args) {
int n=scanner.nextInt();
x=scanner.nextInt();
d=scanner.nextInt();
a=new long [n];
for(int i=0;i<n;i++) {
a[i]=scanner.nextInt();
}
Arrays.sort(a);
for(int i=0;i<n;i++) {
dfs(i,a[i],a[i]);
}
System.out.println(ans);
}
private static void dfs(int o,long min,long s) {
//System.out.println("pppp");
if(s>=x)ans++;
for(int i=o+1;i<a.length;i++) {
if(a[i]-min<=d)dfs(i, min,s+a[i]);
}
}
}
D. Donimo’s
题目
题意:从2*n个数分为n组,其中数值最大的与最小的差距最小
思路:直接排序,每次取两边的数
AC代码:
public class Main{
static Scanner scanner=new Scanner(System.in);
public static void main(String[] args) {
int n=scanner.nextInt();
long a[]=new long [n*2];
for(int i=0;i<2*n;i++) {
a[i]=scanner.nextInt();
}
Arrays.sort(a);
// System.out.println(Arrays.toString(a));
long max=0,min=Long.MAX_VALUE;
for(int i=0,j=a.length-1;i<j;i++,j--) {
//System.out.println(i+"ppp"+j+" "+a[i]+" "+a[j]);
max=Math.max(max, a[i]+a[j]);
min=Math.min(min, a[i]+a[j]);
}
//System.out.println(max+" "+min);
System.out.println(max-min);
}
private static void show() {
}
}
E. Essay Time
题意:字面意思
思路:直接将长度大于4的串装进set(数据过大卡Java)
F. Friendship Matters
题目
题意:给出n个人,和m组关系,判断某两个人是否是一组
思路:并查集模板题目
AC代码:
import java.io.*;
import java.math.*;
import java.util.*;
public class Main {
static HashMap<String, Integer>map=new HashMap<>();
static int find(int arr[], int x) {//查找
if(arr[x]!=x) {
arr[x] = find(arr, arr[x]);
}
return arr[x];
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m=sc.nextInt();
int arr[] = new int[n];
for(int i=0;i<n;i++) {
arr[i] = i;
map.put(sc.next(), i);
}
for(int i=0;i<m;i++) {
int s=sc.nextInt();
if(s==1) {//合并
int a=find(arr, map.get(sc.next()));
int b=find(arr, map.get(sc.next()));
arr[a] = b;
}else {
int a=find(arr, map.get(sc.next()));
int b=find(arr, map.get(sc.next()));
if(a==b)System.out.println("yes");
else System.out.println("no");
}
}
}
}
G. Grade Concept
题目
思路:线段树
H. High Hopes
题目
思路:0%x=0,感觉这题是个 BUG
AC代码:
public class Main{
static Scanner scanner=new Scanner(System.in);
public static void main(String[] args) {
int n=scanner.nextInt();
for(int i=0;i<n;i++) {
show();
}
}
private static void show() {
int a=scanner.nextInt();
int b=scanner.nextInt();
System.out.println(0);
}
}