Я подошел к тому, чтобы создать 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 неверен?