IME++ Starters Try-outs 2019 题解

简介: IME++ Starters Try-outs 2019 题解

IME++ Starters Try-outs 2019 题解


A. Arnon-Degree of Separation

传送门

2db526edcf35c4aac0e2c536fabd44e.png2db526edcf35c4aac0e2c536fabd44e.png

**题目大意:**找到人和人之间有直接联系的最长距离,如果存在不能到达的人就直接输出“=[”反之输出“=]”并输出最短距离

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.Scanner;
public class A {
  public static void main(String[] args) {
    Scanner sc=new Scanner(System.in);
    int n=sc.nextInt();
    int m=sc.nextInt();
    node a[]=new node[n+1];
    for(int i=1;i<=n;i++) {
      a[i]=new node();
    }
    for (int i = 0; i < m; i++) {
      int a1=sc.nextInt();
      int a2=sc.nextInt();
      //储存
      a[a1].list.add(a2);
      a[a2].list.add(a1);
    }
    int count=0;
    for (int i = 1; i <= n; i++) {
      Queue<Integer> queue=new LinkedList<>();
      boolean[] arr=new boolean [n+1];//标记为都没走
      int  b[]=new int [n+1]; //记录走的步数
      arr[i]=true;//标记
      b[i]=0;
      queue.offer(i);//放入队列之中
      while(!queue.isEmpty()) {
        int q=queue.poll();//弹出
        for (int nextX  : a[q].list) {//逐个便利相邻的数字
          if(!arr[nextX]) {//如果没到达
            arr[nextX]=true;//标记
            queue.offer(nextX);//放入队列中
            b[nextX]=b[q]+1;//纪录连接距离
          }
        }
      }
      for (int j = 1; j < arr.length; j++) {
        if(!arr[j]) {
          System.out.println("=[");
          return;
        }
      }
      for (int j : b) {
        count=Math.max(count, j);
      }
    }
    System.out.println("=] "+count);
  }
}
class node{
  List<Integer> list=new ArrayList<Integer>();
  public List<Integer> getList() {
    return list;
  }
  public void setList(List<Integer> list) {
    this.list = list;
  }
}


B. Building Bridges

传送门

2db526edcf35c4aac0e2c536fabd44e.png

题解:没读题,第一眼感觉就是LCS,写了一个模板,然后对了。dp的LCS模板题

import java.util.Scanner;
public class B {
  public static void main(String[] args) {
    Scanner sc=new Scanner(System.in);
    String s1=sc.next();
    String s2=sc.next();
    int max=-1;
    int dp[][]=new int [s1.length()+1][s2.length()+1];
    for (int i = 1; i < dp.length; i++) {
      for (int j = 1; j < dp[0].length; j++) {
        if(s1.charAt(i-1)==s2.charAt(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);
    sc.close();
  }
}

C. Coach

传送门

2db526edcf35c4aac0e2c536fabd44e.png

题意:找打>x,同时队员之差小于等于d的组合数

**题解:**数据量很小,直接排序,然后剪枝就行

import java.util.Arrays;
import java.util.Scanner;
public class C {
  static int count=0;
  static int n,x,d;
  static long a[];
  public static void main(String[] args) {
    Scanner sc=new Scanner(System.in);
    n=sc.nextInt();x=sc.nextInt();d=sc.nextInt();
    a=new long [n];
    for (int i = 0; i < a.length; i++) {
      a[i]=sc.nextLong();
    }
    Arrays.sort(a);
    for (int i = 0; i < a.length; i++) {
      dsf(i,a[i],a[i]);
    }
    System.out.println(count);
  }
  private static void dsf(int k, long min,long sum) {
    if(sum>x) count++;
    for (int i = k+1; i < a.length; i++) {
      if(a[i]-min<=d) dsf(i, min, sum+a[i]);
      }
  }
}

D. Donimo’s

传送门

2db526edcf35c4aac0e2c536fabd44e.png

题解:水题,直接排序,找到前后两个数之和相加得到的最大数字和最小数字的差

package test;
import java.util.Arrays;
import java.util.Scanner;
public class D {
  public static void main(String[] args) {
    Scanner sc=new Scanner(System.in);
    int t=sc.nextInt()*2;
    long a[]=new long [t];
    for (int i = 0; i < a.length; i++) {
      a[i]=sc.nextLong();
    }
    Arrays.sort(a);
    long max=Integer.MIN_VALUE;
    long min=Integer.MAX_VALUE;
    for (int i = 0; i <=t/2; i++) { 
      long sum=a[i]+a[t-1-i];
      max=Math.max(max, sum);
      min=Math.min(min, sum);
    }
    System.out.println(max-min);
    sc.close();
  }
}

E. Essay Time

传送门

2db526edcf35c4aac0e2c536fabd44e.png

题解:将长度大于四的List1里面,然后如果已经存进去了的再存进去一个List2里,但是java过不了,卡java的题

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Scanner;
import java.util.Set;
public class E1 {
  public static void main(String[] args) {
    Scanner sc=new Scanner(System.in);
    int t=sc.nextInt();
    Set <String >map1=new HashSet<String>();
    List <String >map2=new ArrayList<String>();
    while(t-->0) {
      String s=sc.next();
      if(s.length()>=4) {
        if(!map1.contains(s)) {
          map1.add(s);
        }else {
          map2.add(s);
        }
      }
    }
    System.out.println(map2.size());
    for (String string : map2) {
      System.out.println(string);
    }
  }
}


F. Friendship Matters

传送门

2db526edcf35c4aac0e2c536fabd44e.png

题解:并查集模板题,直接套板子就行了

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");
          }
        }
  }
}
相关文章
|
4月前
|
测试技术
简单计算器 ——HDU(1237)
简单计算器 ——HDU(1237)
|
4月前
|
Java
HDU-1865-1sting
HDU-1865-1sting
26 0
|
4月前
leetcode-925:长按键入
leetcode-925:长按键入
29 0
|
C++
【PAT甲级 - C++题解】1112 Stucked Keyboard
【PAT甲级 - C++题解】1112 Stucked Keyboard
53 0
LeetCode 319. Bulb Switcher
初始时有 n 个灯泡关闭。 第 1 轮,你打开所有的灯泡。 第 2 轮,每两个灯泡你关闭一次。 第 3 轮,每三个灯泡切换一次开关(如果关闭则开启,如果开启则关闭)。第 i 轮,每 i 个灯泡切换一次开关。 对于第 n 轮,你只切换最后一个灯泡的开关。 找出 n 轮后有多少个亮着的灯泡。
47 0
LeetCode 319. Bulb Switcher
leetcode 925 长按键入
leetcode 925 长按键入
73 0
|
人工智能
HDU6656——Kejin Player(期望DP+前缀和)
HDU6656——Kejin Player(期望DP+前缀和)
83 0
HDU6656——Kejin Player(期望DP+前缀和)
LeetCode每日一题——764. 最大加号标志
在一个 n x n 的矩阵 grid 中,除了在数组 mines 中给出的元素为 0,其他每个元素都为 1。mines[i] = [xi, yi]表示 grid[xi][yi] == 0
71 0
LeetCode每日一题——764. 最大加号标志
HDOJ(HDU) 1799 循环多少次?(另类杨辉三角)
HDOJ(HDU) 1799 循环多少次?(另类杨辉三角)
111 0
HDOJ(HDU) 1799 循环多少次?(另类杨辉三角)
HDOJ/HDU 1015 Safecracker(枚举)
HDOJ/HDU 1015 Safecracker(枚举)
102 0