Submission #246317

# Submission time Handle Problem Language Result Execution time Memory
246317 2020-07-08T16:04:21 Z Ort Datum (COCI20_datum) Java 11
45 / 50
1000 ms 68360 KB
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;
import java.util.StringTokenizer;

class MyScanner {
    BufferedReader br;
    StringTokenizer st;

    public MyScanner() {
       br = new BufferedReader(new InputStreamReader(System.in));
    }

    String next() {
        while (st == null || !st.hasMoreElements()) {
            try {
                st = new StringTokenizer(br.readLine());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return st.nextToken();
    }

    int nextInt() {
        return Integer.parseInt(next());
    }

    long nextLong() {
        return Long.parseLong(next());
    }

    double nextDouble() {
        return Double.parseDouble(next());
    }

    String nextLine(){
        String str = "";
	  try {
	     str = br.readLine();
	  } catch (IOException e) {
	     e.printStackTrace();
	  }
	  return str;
    }

 }

class Utility {
	public static int sn(String s) {
		int ret = 0;
		for(int i = 0; i < s.length(); i++) {
			ret *= 10;
			ret += ( (s.charAt(i))-'0');
		}
		return ret;
	}
}


class date implements Comparator<String> { 
	
    public int compare(String ca, String cb) { 
    	String sYearA = "" + ca.charAt(4) + ca.charAt(5) + ca.charAt(6) + ca.charAt(7);
    	String sYearB = "" + cb.charAt(4) + cb.charAt(5) + cb.charAt(6) + cb.charAt(7);
    	String sMonthA = "" + ca.charAt(2) + ca.charAt(3);
    	String sMonthB = "" + cb.charAt(2) + cb.charAt(3);
    	String sDayA = "" + ca.charAt(0) + ca.charAt(1);
    	String sDayB = "" + cb.charAt(0) + cb.charAt(1);
    	int nYearA = Utility.sn(sYearA);
    	int nYearB = Utility.sn(sYearB);
    	int nMonthA = Utility.sn(sMonthA);
    	int nMonthB = Utility.sn(sMonthB);
    	int nDayA = Utility.sn(sDayA);
    	int nDayB = Utility.sn(sDayB);
    	if(nYearA==nYearB) {
    		if(nMonthA==nMonthB)
    			return Integer.compare(nDayA, nDayB);
    		return Integer.compare(nMonthA, nMonthB);
    	}
        return Integer.compare(nYearA, nYearB);
    }
    
}


class Pair implements Comparable<Pair> {
	String s;
	int ind;
	Pair(String s, int ind) {
		this.s = s;
		this.ind = ind;
	}
	public int compareTo(Pair o) {
		String ca = s;
		String cb = o.s;
		String sYearA = "" + ca.charAt(4) + ca.charAt(5) + ca.charAt(6) + ca.charAt(7);
    	String sYearB = "" + cb.charAt(4) + cb.charAt(5) + cb.charAt(6) + cb.charAt(7);
    	String sMonthA = "" + ca.charAt(2) + ca.charAt(3);
    	String sMonthB = "" + cb.charAt(2) + cb.charAt(3);
    	String sDayA = "" + ca.charAt(0) + ca.charAt(1);
    	String sDayB = "" + cb.charAt(0) + cb.charAt(1);
    	int nYearA = Utility.sn(sYearA);
    	int nYearB = Utility.sn(sYearB);
    	int nMonthA = Utility.sn(sMonthA);
    	int nMonthB = Utility.sn(sMonthB);
    	int nDayA = Utility.sn(sDayA);
    	int nDayB = Utility.sn(sDayB);
    	if(nYearA==nYearB) {
    		if(nMonthA==nMonthB)
    			return Integer.compare(nDayA, nDayB);
    		return Integer.compare(nMonthA, nMonthB);
    	}
        return Integer.compare(nYearA, nYearB);
	}

}

public class datum {
	
	public static int cmp(String ca, String cb) { 
		String sYearA = "" + ca.charAt(4) + ca.charAt(5) + ca.charAt(6) + ca.charAt(7);
    	String sYearB = "" + cb.charAt(4) + cb.charAt(5) + cb.charAt(6) + cb.charAt(7);
    	String sMonthA = "" + ca.charAt(2) + ca.charAt(3);
    	String sMonthB = "" + cb.charAt(2) + cb.charAt(3);
    	String sDayA = "" + ca.charAt(0) + ca.charAt(1);
    	String sDayB = "" + cb.charAt(0) + cb.charAt(1);
    	int nYearA = Utility.sn(sYearA);
    	int nYearB = Utility.sn(sYearB);
    	int nMonthA = Utility.sn(sMonthA);
    	int nMonthB = Utility.sn(sMonthB);
    	int nDayA = Utility.sn(sDayA);
    	int nDayB = Utility.sn(sDayB);
    	if(nYearA==nYearB) {
    		if(nMonthA==nMonthB)
    			return Integer.compare(nDayA, nDayB);
    		return Integer.compare(nMonthA, nMonthB);
    	}
        return Integer.compare(nYearA, nYearB);
    }
	
	public static void main(String[] args) {
		
		int days[] = {-1, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
		
		ArrayList<String> listPalindromicDates = new ArrayList<String>();
		ArrayList<Pair> listDates = new ArrayList<Pair>();
		
		for(int month = 1; month < days.length; month++) {
			
			for(int day = 1; day <= days[month]; day++) {
				
				String sday = String.valueOf(day);
				if(sday.length()==1) sday = '0' + sday;
				
				String smonth = String.valueOf(month);
				if(smonth.length()==1) smonth = '0' + smonth;
				
				String syear = sday + smonth;
				syear = new StringBuffer(syear).reverse().toString();
				
				listPalindromicDates.add(sday + smonth + syear);
				
				if(month==2 && day==28) {
					int new_day = day + 1;
					
					sday = String.valueOf(new_day);
					if(sday.length()==1) sday = '0' + sday;
					
					smonth = String.valueOf(month);
					if(smonth.length()==1) smonth = '0' + smonth;
					
					syear = sday + smonth;
					syear = new StringBuffer(syear).reverse().toString();	
					
					listPalindromicDates.add(sday + smonth + syear);
				}

			}
		}
		
		
		Collections.sort(listPalindromicDates, new date());
		
		MyScanner input = new MyScanner();
		
		int n = input.nextInt();
		
		for(int i = 0; i < n; i++) {
			String D = input.next();
			D = D.replace(".", "");
			listDates.add(new Pair(D, i));
		}
		
		Collections.sort(listDates);
		
		int index = 0;
		
		String[] sarrAnswer = new String[n];

		for(int i = 0; i < listDates.size(); i++) {
			while(index < listPalindromicDates.size() && (cmp(listDates.get(i).s, listPalindromicDates.get(index)) >= 0 ) ) index++;
			sarrAnswer[listDates.get(i).ind] = ( listPalindromicDates.get(index).substring(0, 2) + "." + listPalindromicDates.get(index).substring(2, 4) + "." + listPalindromicDates.get(index).substring(4, 8) + "." );  
		}
		
		for(int i = 0; i < n; i++)
			System.out.println(sarrAnswer[i]);
		
		
	}
	
	
	
}
# Verdict Execution time Memory Grader output
1 Correct 136 ms 15208 KB Output is correct
2 Execution timed out 1058 ms 67524 KB Time limit exceeded
3 Correct 140 ms 15740 KB Output is correct
4 Correct 145 ms 16352 KB Output is correct
5 Correct 137 ms 15876 KB Output is correct
6 Correct 132 ms 15348 KB Output is correct
7 Correct 136 ms 15732 KB Output is correct
8 Correct 128 ms 15652 KB Output is correct
9 Correct 132 ms 15772 KB Output is correct
10 Correct 993 ms 68360 KB Output is correct