Статьи

Facebook Hacker Cup: решение проблем студенческих игр на Java

Эта программа является решением проблемы Studious Student из Facebook Hacker Cup. Проблема может быть найдена здесь: ссылка .

Эта проблема:

Студент

Вам дали список слов для изучения и запоминания. Будучи прилежным учеником языка и искусства, вы решили совсем не изучать их и вместо этого создавать бессмысленные игры на их основе. Одна игра, которую вы придумали, состоит в том, чтобы увидеть, как можно объединить слова, чтобы создать лексикографически наименьшую возможную строку.

вход

В качестве входных данных для игры в эту игру вы получите текстовый файл, содержащий целое число N — количество наборов слов, с которыми вам нужно играть в свою игру. За этим последуют N наборов слов, каждый из которых начинается с целого числа M, количества слов в наборе, за которым следует M слов. Все токены на входе будут разделены пробелами и, кроме N и M, будут состоять исключительно из строчных букв.

Выход

Ваша заявка должна содержать лексикографически короткие строки для каждого соответствующего набора слов, по одной в строке и по порядку.

Ограничения

1
2
3
1 <= N <= 100
1 <= M <= 9
1 <= all word lengths <= 10

Пример ввода

1
2
3
4
5
6
5
6 facebook hacker cup for studious students
5 k duz q rc lvraw
5 mybea zdr yubx xe dyroiy
5 jibw ji jp bw jibw
5 uiuy hopji li j dcyi

Пример вывода

1
2
3
4
5
cupfacebookforhackerstudentsstudious
duzklvrawqrc
dyroiymybeaxeyubxzdr
bwjibwjibwjijp
dcyihopjijliuiuy
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import java.io.*;
import java.util.Arrays;
public class StudiousStudent
{
    StudiousStudent(String inputFile) throws IOException, FileNotFoundException
    {
        FileInputStream fis = new FileInputStream(inputFile);
        DataInputStream in = new DataInputStream(fis);
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
        String line = null;
        String splitArray[] = null;
        //Reading the file line by line
        while((line = br.readLine()) != null)
        {
            //Splitting a line from spaces
            splitArray = line.split(" ");
 
            //Initial Sort
            Arrays.sort(splitArray);
 
            //Advanced Sort
            for (int i = 1; i<splitArray.length; i++)
            {
                for (int j = i+1; j<splitArray.length; j++)
                {
                    if ((splitArray[j].startsWith(splitArray[i])) && (splitArray[i].length() < splitArray[j].length()))
                    {
                        String tmp = splitArray[i];
                        splitArray[i] = splitArray[j];
                        splitArray[j] = tmp;
                    }
                }
            }
            for (int i = 1; i<splitArray.length; i++) System.out.print(splitArray[i]+"");
            System.out.println();
        }
        br.close();
    }
    public static void main(String args[]) throws FileNotFoundException, IOException
    {
        new StudiousStudent("StudiousStudent.txt");
    }
}

Выход:
Выход для студенческого студента

Ссылка: Facebook Hacker Cup: решение для студента на Java от нашего партнера по JCG Вишала Лада в блоге myCoding.net .