yukicoder contest 197 の感想
問題
yukicoder contest 197 - yukicoder
昨日のyukicoderのコンテストの振り返りです。
No.721 Die tertia (ディエ・テルツィア)
No.721 Die tertia (ディエ・テルツィア) - yukicoder
日付に関する問題です。JavaのAPIにカレンダーに関するクラスがあります。それを利用すると簡単かもしれません。
コード
import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Scanner; public class Exec0721 { public static void main(String[] args) { Calendar calendar = Calendar.getInstance(); Scanner scan = new Scanner(System.in); String s = scan.next(); scan.close(); int year = Integer.parseInt(s.substring(0, 4)); String month = s.substring(5, 7); String day = s.substring(8, 10); if(month.charAt(0) == '0'){ month = month.substring(1, 2); } if(day.charAt(0) == '0'){ day = day.substring(1, 2); } SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); calendar.set(year, Integer.parseInt(month) - 1, Integer.parseInt(day)); //System.out.println(sdf.format(calendar.getTime())); calendar.add(Calendar.DATE, 2); System.out.println(sdf.format(calendar.getTime())); } }
No.722 100×100=1000
No.722 100×100=1000 - yukicoder
正規表現などを知っていないと実装がめんどくさくなるんでしょうか。
コード
import java.util.Scanner; public class Exec0722 { public static void main(String[] args) { Scanner scan = new Scanner(System.in); String A = scan.next(); String B = scan.next(); scan.close(); int cnt1 = 0; int cnt2 = 0; for(int i = 0; i < A.length(); i++) { if(A.charAt(i) == '0') { cnt1 ++; } } for(int i = 0; i < B.length(); i++) { if(B.charAt(i) == '0') { cnt2 ++; } } if(A.charAt(0) != '-' && B.charAt(0) != '-') { if(cnt1 >= 2 && cnt2 >= 2 && cnt1 == A.length() - 1 && cnt2 == B.length() - 1) { int t1 = Integer.parseInt(A.substring(0, 1)); int t2 = Integer.parseInt(B.substring(0, 1)); int ans = t1 * t2; System.out.print(ans); for(int i = 0; i < cnt1 + cnt2 - 1; i++) { System.out.print("0"); } System.out.println(); }else { long t1 = Integer.parseInt(A); long t2 = Integer.parseInt(B); long ans = t1 * t2; if(ans >= 0) { String k = Long.toString(ans); if(k.length() <= 8) { System.out.println(k); }else { System.out.println("E"); } } } }else if(A.charAt(0) != '-' || B.charAt(0) != '-') { long t1 = Integer.parseInt(A); long t2 = Integer.parseInt(B); if(t1 < 0) { t1 = -t1; } if(t2 < 0) { t2 = -t2; } String A1 = Long.toString(t1); String B1 = Long.toString(t2); if(cnt1 >= 2 && cnt2 >= 2 && cnt1 == A1.length() - 1&& cnt2 == B1.length() - 1) { long ans = t1 * t2; String k = Long.toString(ans); k = k.substring(0, k.length() - 1); System.out.println("-" + k); }else { long ans = t1 * t2; if(ans >= 0) { String k = Long.toString(ans); if(k.length() <= 8) { System.out.println("-" + k); }else { System.out.println("E"); } } } }else { if(cnt1 >= 2 && cnt2 >= 2 && cnt1 == A.length() - 2&& cnt2 == B.length() - 2) { int t1 = Integer.parseInt(A.substring(1, 2)); int t2 = Integer.parseInt(B.substring(1, 2)); int ans = t1 * t2; System.out.print(ans); for(int i = 0; i < cnt1 + cnt2 - 1; i++) { System.out.print("0"); } System.out.println(); }else { long t1 = Integer.parseInt(A); long t2 = Integer.parseInt(B); long ans = t1 * t2; if(ans >= 0) { String k = Long.toString(ans); if(k.length() <= 8) { System.out.println(k); }else { System.out.println("E"); } } } } } }
No.723 2つの数の和
個人的にはNo. 722より簡単な問題でした。
各数字の個数を数え上げます。
例えば、 として、
の個数を、 の個数を とすると、 が10と8を使って18となる数です。
コード
import java.util.Scanner; public class Exec0723 { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int N = scan.nextInt(); int X = scan.nextInt(); int l = 100001; long []a = new long[l]; for(int i = 0; i < N; i++) { a[scan.nextInt()] ++; } scan.close(); long ans = 0; for(int i = 0; i < l; i++) { int res = X - i; if(res >= 0 && res <= 100000) { ans += a[i] * a[res]; } } System.out.println(ans); } }
感想
途中で別のことをやっていてコンテスト中ずっと問題を解いていたわけではないので、A問題しかとけませんでした。まあ、時間があっても解けたかどうかは分かりませんが。