Квалификационный раунд Codejam 2020 Задача 3 ... Что не так с логи c? - PullRequest
0 голосов
/ 09 апреля 2020

Я подошел к тому, чтобы создать 3 массива: один для времени начала каждого события, один для времени окончания и один для возможного распределения задач. Я сбросил третий массив, чтобы содержать «х» для каждого элемента. Затем я сначала назначаю все возможные задачи Кэмерону, проверяя, перекрывает ли задача какую-либо ранее назначенную задачу, используя этот лог c:

  • Если (время начала новой задачи < время начала назначенной задачи и время окончания новой задачи <= время начала назначенной задачи) <strong>ИЛИ (время начала новой задачи> = время окончания новой задачи и время окончания новой задачи> время окончания назначенной задачи task) THEN это новое задание не перекрывается и может быть назначено Камерону.

Затем я следую аналогичной логике c, чтобы назначать задания Jam ie. Затем я печатаю НЕВОЗМОЖНО, если есть еще один пустой слот, иначе ответ. Пожалуйста, проверьте код:

import java.lang.*;
import java.util.*;
import java.io.*;

public class Solution {


    public static void main (String [] args){

        //Scanner
        Scanner input = new Scanner(System.in);


        int T = input.nextInt();    //test cases

        for(int i=0; i<T; i++){

            int x = i+1;    //test case number
            int N = input.nextInt();


            int [] S = new int [N];     //start time
            int [] E = new int [N];     //end time
            char [] y = new char [N];   //answer

            char C = 'C';   //Cameron
            char J = 'J';   //Jamie
            int flag = 0;   //1 if impossible


            for(int j=0; j<N; j++)  //setting all slots to x
                y[j] = 'x';

            for(int j=0; j<N; j++){     //taking input
                S[j] = input.nextInt();
                E[j] = input.nextInt();
            }

            y[0] = C;   //assigning C to first task

            for(int j=1; j<N; j++){ //assigning rest of C's
                for(int k=0; k<j; k++){

                    if(y[k] == C){
                        if((S[j]<S[k] && E[j]<= S[k]) || (S[j]>=E[k] && E[j]> E[k])){
                            y[j] = C;
                        }
                        else{
                            y[j] = 'x';
                            break;
                        }
                    }
                }
            }


            for(int j=1; j<N; j++){     //assigning J to first empty slot 
                if(y[j] == 'x'){
                    y[j] = J;
                    break;
                }
            }

            for(int j=1; j<N; j++){     //assigning rest of J's
                if(y[j] == 'x'){
                    for(int k=0; k<j; k++){

                        if(y[k] == J){
                            if((S[j]<S[k] && E[j]<= S[k]) || (S[j]>=E[k] && E[j]> E[k])){
                                y[j] = J;
                            }
                            else{
                                y[j] = 'x';
                                break;
                            }
                        }
                    }
                }

            }

            for(int j=0; j<N; j++){     //Check if there is empty slot
                if(y[j] == 'x'){
                    flag = 1;
                    break;
                }
            }
            String Y = "";  //Answer

            if(flag == 1){
                Y = "IMPOSSIBLE";
                System.out.println("Case #" + x + ": " + Y);
            }

            else{
                for(int j=0; j<N; j++)
                    Y += y[j];

                System.out.println("Case #" + x + ": " + Y );
            }
        }
    }
}

Я продолжаю получать WA по некоторым причинам. Почему лог c неверен?

1 Ответ

0 голосов
/ 19 апреля 2020

вместо того, чтобы создавать 3 массива, вы должны создать множество массивов по 3 элемента в каждом (время начала, время окончания, индекс входа). Затем отсортируйте эти массивы в соответствии с временем запуска. Это проблема невзвешенного интервального планирования, вы можете посмотреть описание здесь: http://www.cse.psu.edu/~ads22/courses/cmpsc465/S12/lec-notes/CMPSC465-S12-Lec-17-greedy-algs.pptx.pdf

...