SPOJ: CHAOS - Godzina chaosu

0

Halo, tu nowicjusz. Przekroczono limit czasu, wszystkie przykładowe testy przechodzą. Da się to jakoś usprawnić? Czy pomysł mizerny? Nie mam pewności też co do tych godzin, czy zapisałem wszystkie możliwości.. Proszę o jakieś wskazówki
https://pl.spoj.com/problems/CHAOS/

import java.text.SimpleDateFormat;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.regex.Pattern;
import java.lang.*;****

class Main
{
	public static final LocalTime[] palidrom={
            LocalTime.parse("00:01"),
            LocalTime.parse("00:02"),
            LocalTime.parse("00:03"),
            LocalTime.parse("00:04"),
            LocalTime.parse("00:05"),
            LocalTime.parse("00:06"),
            LocalTime.parse("00:07"),
            LocalTime.parse("00:08"),
            LocalTime.parse("00:09"),
            LocalTime.parse("00:11"),
            LocalTime.parse("00:22"),
            LocalTime.parse("00:33"),
            LocalTime.parse("00:44"),
            LocalTime.parse("00:55"),
            LocalTime.parse("01:01"),
            LocalTime.parse("02:02"),
            LocalTime.parse("03:03"),
            LocalTime.parse("04:04"),
            LocalTime.parse("05:05"),
            LocalTime.parse("06:06"),
            LocalTime.parse("07:07"),
            LocalTime.parse("08:08"),
            LocalTime.parse("09:09"),
            LocalTime.parse("10:01"),
            LocalTime.parse("11:11"),
            LocalTime.parse("12:21"),
            LocalTime.parse("13:31"),
            LocalTime.parse("14:41"),
            LocalTime.parse("15:51"),
            LocalTime.parse("20:02"),
            LocalTime.parse("21:12"),
            LocalTime.parse("22:22"),
            LocalTime.parse("23:32"),
            LocalTime.parse("00:00")
    };
	public static void main (String[] args) throws java.lang.Exception
	{
		Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        Pattern pat=Pattern.compile("[0-2][0-9]:[0-5][0-9]");
        for (int i = 0; i <=n ; i++) {
            String hour=sc.nextLine();
            if (pat.matcher(hour).matches()){
                LocalTime input=LocalTime.parse(hour);
                DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH:mm");
                for (int j = 0; j <palidrom.length-1 ; j++) {
                   if (input.isBefore(palidrom[j])){
                        System.out.println(palidrom[j].format(dtf));
                        break;
                    }else if (input.equals(palidrom[j])){
                       System.out.println(palidrom[j+1].format(dtf));
                       break;
                   }
                   else if (input.isAfter(palidrom[palidrom.length-2])||input.equals(palidrom[palidrom.length-2])){
                        System.out.println(palidrom[palidrom.length-1].format(dtf));
                        break;
                    }
                }
            }
        }
}
}
1

nie bardzo rozumiem twoj kod, ale znanym sposobem na sprawdzanie palindromow jest rekurencja

#https://pl.spoj.com/problems/CHAOS/
from datetime import datetime
def isPalind(str):
	if len(str)==1: return True
	if str[0]!=str[len(str)-1]: return False
	else: return isPalind(str[1:len(str)-1])

print(isPalind("aaaakajakaaaa"))
time=str(datetime.now().time())[0:8]
while not isPalind(time):
	time=str(datetime.now().time())[0:8]
print(time)

teraz tylko czekac do 21:12 ;)
edit w sumie to nie, wykrywa czasy co 10 min, np 2112, tylko trzeba uwazac na przypadek gdy napis ma 2 znaki, zeby nie wyjsc za tablice

0

Udało się :) Zrobiłem dokładnie to samo tylko na zwykłych intach, przy możliwych rozwiązaniach trzeba uwzględnić jeszcze godziny 01:11, 01:21, 1:31, 1:41, 1:51, 2:12 itd .. aż do 9:59, jakoś ciężko mi to było wywnioskować z tego opisu.. ;x Wadą kodu jest na pewno duża tablica. Czytając pierwszy raz zadanko wydawało mi się po prostu, że takich palidromów będzie dużo mniej. xd emocje jak na grzybach

1 użytkowników online, w tym zalogowanych: 0, gości: 1