SlideShare a Scribd company logo
1 of 25
+ 
CodeFestival 2014 B 
ICPC AOJ Meeting 2014/10/26
+ 
大会開催ページ 
http://code-festival-2014-qualb.contest.atcoder.jp/
+ 
Problem 1 
 あるピアニストは両手を使って、2 つの曲を同時に演奏するこ 
とができます。つまり、右手と左手で異なる曲を同時に演奏し 
ます。 
 片方の曲の演奏時間はA 秒で、もう片方の曲の演奏時間 
はB 秒です。 
 このピアニストはこれら異なる2 曲を同時に演奏し始めます。 
よって、ステージ上にいる時間はこれらの演奏時間のうち長い 
方と一致します。 
 ピアニストがステージ上にいる時間を求めてください。 
http://code-festival-2014-qualb.contest.atcoder.jp/tasks/code_festival_qualB_a
+ 
SourceCode 
public class Main { 
public static void main(String[] args){ 
String[] strs = new java.util.Scanner(System.in).nextLine().split(" "); 
System.out.println(Math.max(Integer.parseInt(strs[0]),Integer.parseInt(strs[1]))); 
} 
}
+
+ 
Problem 2 
 高橋君は健康のためにN 日間ウォーキングをしました。 
 歩数は日によって違います。i 日目に歩いた歩数はai 歩です。 
 高橋君の元々の目標は計K 歩歩くことでした。高橋君は何日 
目にその目標が達成されたか気になりました。 
 高橋君が歩いた歩数の情報が与えられるので、何日目に累 
計K 歩を達成したか求めてください。 
http://code-festival-2014-quala.contest.atcoder.jp/tasks/code_festival_qualB_b
+ 
SourceCode 
import java.util.Scanner; 
/** 
* Created by nullzine on 2014/10/26. 
*/ 
public class Main { 
public static void main(String[] args){ 
Scanner sc = new Scanner(System.in); 
String[] strs = sc.nextLine().split(" "); 
int n = Integer.parseInt(strs[0]); 
int k = Integer.parseInt(strs[1]); 
int sum=0; 
for(int i=0;i<n;i++){ 
sum += Integer.parseInt(sc.nextLine()); 
if(k<=sum){ 
System.out.println(i+1); 
break; 
} 
} 
} 
}
+
+
+ 
Problem 3 
 高橋君は錬金術のプロフェッショナルです。 
 この世界の金属には、2N 文字( N は整数)からなる名前が付 
けられており、名前は全て大文字アルファベットで構成されて 
います。 
 高橋君が既存の金属S1,S2 から新たな金属S3 を錬金できる条 
件は、S1,S2 からそれぞれN 文字ずつ取り出してきて、それ 
らの文字を適当に並べ替えた結果、S3 と一致するときです。 
 3 つの金属の名前S1,S2,S3が与えられるのでS1,S2 からS3 が 
錬金できるか判定してください。 
http://code-festival-2014-quala.contest.atcoder.jp/tasks/code_festival_qualB_c
+
+ 
SourceCode 
import java.util.HashMap; 
import java.util.Map; 
import java.util.Scanner; 
/** 
* Created by nullzine on 2014/10/26. 
*/ 
public class Main { 
public static void main(String[] args){ 
Scanner sc = new Scanner(System.in); 
String a = sc.nextLine(); 
String b = sc.nextLine(); 
String c = sc.nextLine(); 
HashMap<Character,Integer> masterAMap = new HashMap<>(); 
for(int i=0;i<a.length();i++){ 
if(masterAMap.containsKey(a.charAt(i))){ 
int tmp = masterAMap.get(a.charAt(i)); 
masterAMap.put(a.charAt(i),tmp+1); 
}else{ 
masterAMap.put(a.charAt(i),1); 
} 
}
+ 
HashMap<Character,Integer> masterBMap = new HashMap<>(); 
for(int i=0;i<b.length();i++){ 
if(masterBMap.containsKey(b.charAt(i))){ 
int tmp = masterBMap.get(b.charAt(i)); 
masterBMap.put(b.charAt(i),tmp+1); 
}else{ 
masterBMap.put(b.charAt(i),1); 
} 
} 
HashMap<Character,Integer> slaveMap = new HashMap<>(); 
for(int i=0;i<c.length();i++){ 
if(slaveMap.containsKey(c.charAt(i))){ 
int tmp = slaveMap.get(c.charAt(i)); 
slaveMap.put(c.charAt(i),tmp+1); 
}else{ 
slaveMap.put(c.charAt(i),1); 
} 
} 
String result = "YES";
+ 
for(Map.Entry<Character,Integer> m:slaveMap.entrySet()){ 
int entA=0; 
if(masterAMap.containsKey(m.getKey())) { 
entA = masterAMap.get(m.getKey()); 
} 
int entB=0; 
if(masterBMap.containsKey(m.getKey())) { 
entB = masterBMap.get(m.getKey()); 
} 
if(!masterAMap.containsKey(m.getKey())&&!masterBMap.containsKey(m.getKey 
result= "NO"; 
break; 
}else if(entA+entB<m.getValue()){ 
result = "NO"; 
break; 
}else if((a.length()/2<entA)||(b.length()/2<entB)){ 
result = "NO"; 
break; 
} 
} 
System.out.println(result); 
} 
}
+
+
+ 
Rubyでやってみる 
s = $stdin.read.split("n") 
puts (s[0].split(//).product(s[1].split(//)).include?(s[2].split(//)))? "YES":"NO"
+ 
何が原因なのか? 
 この問題は、N=3のとき文字列Aから3文字、文字列Bから3文 
字選択しなければならない。 
 しかし、提出したプログラムでは文字列Aから4文字、文字列B 
から2文字選択した場合でもYESを出力してしまう。 
 だが、時間内にこの問題を解決する方法を見つけられなかった。
+ 
Problem 4 
 高橋君は登山家で、いまある山脈を登っています。 
 この山脈にはN 個の山小屋が東西へ一直線上に並んでおり、各山小屋に 
は西から東へ順番に、1 からN までの番号がつけられています。 
 i 番目の山小屋は標高hi のところに建てられています。 
 高橋君は各山小屋から、いくつの山小屋を見ることが出来るのか気になり 
ました。 
 i 番目の山小屋からj 番目の山小屋が見える条件は、その間にある山小屋 
とj 番目の山小屋の標高が全てhi 以下であることです。 
 各山小屋から見ることが出来る山小屋の個数を求めてください。 
 なお、i 番目の山小屋から見ることができる山小屋にi 番目の山小屋自身 
は含まれません。 
http://code-festival-2014-quala.contest.atcoder.jp/tasks/code_festival_qualB_d
+
+ 
SourceCode 
import java.util.Scanner; 
/** 
* Created by nullzine on 2014/10/26. 
*/ 
public class Main { 
public static void main(String[] args){ 
Scanner sc = new Scanner(System.in); 
int n = Integer.parseInt(sc.nextLine()); 
int[] data = new int[n]; 
for(int i=0;i<data.length;i++){ 
data[i] = Integer.parseInt(sc.nextLine()); 
} 
int[] counts = new int[data.length]; 
for(int i=0;i<data.length;i++){ 
int count=0; 
for(int j=i;0<=j;j--){ 
if(j!=i&&data[j]<=data[i]){ 
count++; 
} 
if(data[i]<data[j]){ 
break; 
} 
} 
for(int j=i;j<data.length;j++){ 
if(j!=i&&data[j]<=data[i]){ 
count++; 
} 
if(data[i]<data[j]){ 
break; 
} 
} 
counts[i]=count; 
} 
for(int num:counts){ 
System.out.println(num); 
} 
} 
}
+
+
+
+ 
Result

More Related Content

More from nullzine

第二回ミーティングスライド
第二回ミーティングスライド第二回ミーティングスライド
第二回ミーティングスライドnullzine
 

More from nullzine (13)

Meeting19
Meeting19Meeting19
Meeting19
 
Meeting18
Meeting18Meeting18
Meeting18
 
Meeting13
Meeting13Meeting13
Meeting13
 
Meeting12
Meeting12Meeting12
Meeting12
 
Meeting11
Meeting11Meeting11
Meeting11
 
Meeting9
Meeting9Meeting9
Meeting9
 
Meeting8
Meeting8Meeting8
Meeting8
 
Meeting7
Meeting7Meeting7
Meeting7
 
Meeting6
Meeting6Meeting6
Meeting6
 
Meeting5
Meeting5Meeting5
Meeting5
 
Meeting4
Meeting4Meeting4
Meeting4
 
第二回ミーティングスライド
第二回ミーティングスライド第二回ミーティングスライド
第二回ミーティングスライド
 
Meeting1
Meeting1Meeting1
Meeting1
 

Meeting10

  • 1. + CodeFestival 2014 B ICPC AOJ Meeting 2014/10/26
  • 3. + Problem 1  あるピアニストは両手を使って、2 つの曲を同時に演奏するこ とができます。つまり、右手と左手で異なる曲を同時に演奏し ます。  片方の曲の演奏時間はA 秒で、もう片方の曲の演奏時間 はB 秒です。  このピアニストはこれら異なる2 曲を同時に演奏し始めます。 よって、ステージ上にいる時間はこれらの演奏時間のうち長い 方と一致します。  ピアニストがステージ上にいる時間を求めてください。 http://code-festival-2014-qualb.contest.atcoder.jp/tasks/code_festival_qualB_a
  • 4. + SourceCode public class Main { public static void main(String[] args){ String[] strs = new java.util.Scanner(System.in).nextLine().split(" "); System.out.println(Math.max(Integer.parseInt(strs[0]),Integer.parseInt(strs[1]))); } }
  • 5. +
  • 6. + Problem 2  高橋君は健康のためにN 日間ウォーキングをしました。  歩数は日によって違います。i 日目に歩いた歩数はai 歩です。  高橋君の元々の目標は計K 歩歩くことでした。高橋君は何日 目にその目標が達成されたか気になりました。  高橋君が歩いた歩数の情報が与えられるので、何日目に累 計K 歩を達成したか求めてください。 http://code-festival-2014-quala.contest.atcoder.jp/tasks/code_festival_qualB_b
  • 7. + SourceCode import java.util.Scanner; /** * Created by nullzine on 2014/10/26. */ public class Main { public static void main(String[] args){ Scanner sc = new Scanner(System.in); String[] strs = sc.nextLine().split(" "); int n = Integer.parseInt(strs[0]); int k = Integer.parseInt(strs[1]); int sum=0; for(int i=0;i<n;i++){ sum += Integer.parseInt(sc.nextLine()); if(k<=sum){ System.out.println(i+1); break; } } } }
  • 8. +
  • 9. +
  • 10. + Problem 3  高橋君は錬金術のプロフェッショナルです。  この世界の金属には、2N 文字( N は整数)からなる名前が付 けられており、名前は全て大文字アルファベットで構成されて います。  高橋君が既存の金属S1,S2 から新たな金属S3 を錬金できる条 件は、S1,S2 からそれぞれN 文字ずつ取り出してきて、それ らの文字を適当に並べ替えた結果、S3 と一致するときです。  3 つの金属の名前S1,S2,S3が与えられるのでS1,S2 からS3 が 錬金できるか判定してください。 http://code-festival-2014-quala.contest.atcoder.jp/tasks/code_festival_qualB_c
  • 11. +
  • 12. + SourceCode import java.util.HashMap; import java.util.Map; import java.util.Scanner; /** * Created by nullzine on 2014/10/26. */ public class Main { public static void main(String[] args){ Scanner sc = new Scanner(System.in); String a = sc.nextLine(); String b = sc.nextLine(); String c = sc.nextLine(); HashMap<Character,Integer> masterAMap = new HashMap<>(); for(int i=0;i<a.length();i++){ if(masterAMap.containsKey(a.charAt(i))){ int tmp = masterAMap.get(a.charAt(i)); masterAMap.put(a.charAt(i),tmp+1); }else{ masterAMap.put(a.charAt(i),1); } }
  • 13. + HashMap<Character,Integer> masterBMap = new HashMap<>(); for(int i=0;i<b.length();i++){ if(masterBMap.containsKey(b.charAt(i))){ int tmp = masterBMap.get(b.charAt(i)); masterBMap.put(b.charAt(i),tmp+1); }else{ masterBMap.put(b.charAt(i),1); } } HashMap<Character,Integer> slaveMap = new HashMap<>(); for(int i=0;i<c.length();i++){ if(slaveMap.containsKey(c.charAt(i))){ int tmp = slaveMap.get(c.charAt(i)); slaveMap.put(c.charAt(i),tmp+1); }else{ slaveMap.put(c.charAt(i),1); } } String result = "YES";
  • 14. + for(Map.Entry<Character,Integer> m:slaveMap.entrySet()){ int entA=0; if(masterAMap.containsKey(m.getKey())) { entA = masterAMap.get(m.getKey()); } int entB=0; if(masterBMap.containsKey(m.getKey())) { entB = masterBMap.get(m.getKey()); } if(!masterAMap.containsKey(m.getKey())&&!masterBMap.containsKey(m.getKey result= "NO"; break; }else if(entA+entB<m.getValue()){ result = "NO"; break; }else if((a.length()/2<entA)||(b.length()/2<entB)){ result = "NO"; break; } } System.out.println(result); } }
  • 15. +
  • 16. +
  • 17. + Rubyでやってみる s = $stdin.read.split("n") puts (s[0].split(//).product(s[1].split(//)).include?(s[2].split(//)))? "YES":"NO"
  • 18. + 何が原因なのか?  この問題は、N=3のとき文字列Aから3文字、文字列Bから3文 字選択しなければならない。  しかし、提出したプログラムでは文字列Aから4文字、文字列B から2文字選択した場合でもYESを出力してしまう。  だが、時間内にこの問題を解決する方法を見つけられなかった。
  • 19. + Problem 4  高橋君は登山家で、いまある山脈を登っています。  この山脈にはN 個の山小屋が東西へ一直線上に並んでおり、各山小屋に は西から東へ順番に、1 からN までの番号がつけられています。  i 番目の山小屋は標高hi のところに建てられています。  高橋君は各山小屋から、いくつの山小屋を見ることが出来るのか気になり ました。  i 番目の山小屋からj 番目の山小屋が見える条件は、その間にある山小屋 とj 番目の山小屋の標高が全てhi 以下であることです。  各山小屋から見ることが出来る山小屋の個数を求めてください。  なお、i 番目の山小屋から見ることができる山小屋にi 番目の山小屋自身 は含まれません。 http://code-festival-2014-quala.contest.atcoder.jp/tasks/code_festival_qualB_d
  • 20. +
  • 21. + SourceCode import java.util.Scanner; /** * Created by nullzine on 2014/10/26. */ public class Main { public static void main(String[] args){ Scanner sc = new Scanner(System.in); int n = Integer.parseInt(sc.nextLine()); int[] data = new int[n]; for(int i=0;i<data.length;i++){ data[i] = Integer.parseInt(sc.nextLine()); } int[] counts = new int[data.length]; for(int i=0;i<data.length;i++){ int count=0; for(int j=i;0<=j;j--){ if(j!=i&&data[j]<=data[i]){ count++; } if(data[i]<data[j]){ break; } } for(int j=i;j<data.length;j++){ if(j!=i&&data[j]<=data[i]){ count++; } if(data[i]<data[j]){ break; } } counts[i]=count; } for(int num:counts){ System.out.println(num); } } }
  • 22. +
  • 23. +
  • 24. +