知り合いと飲みに行く + Codeforces Round #164
お昼は某所へ。あんまり聞くこともなかったなーという印象。
夜は待ち合わせていた友人とゲーセンへ。
ひと通りの音ゲーをやったような。ミュージックガンガン含む。
二時間程度駄弁りつつ帰宅。
地元ゲーセンはアレだったので直帰しました。
帰宅後はcodeforcesに備える。
A問題。
HomeとAwayのカラーがチームごとに与えられていて、
総当りするときにホーム側がアウェイ側の色にしなきゃいけない回数を求める。
総当り(O(n^2))して、数字が一致するところをカウントすればok。
自分のチーム同士の比較はやらない。
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
public class Main2 {
public static void main(String args[]){
Scanner input = new Scanner(System.in);
int n = input.nextInt();
int[] h = new int[n];
int[] a = new int[n];
for(int i = 0 ; i < n ; i++){
h[i] = input.nextInt();
a[i] = input.nextInt();
}
System.out.println(kaburi(n,h,a));
}
public static int kaburi(int n,int[] h,int[] a){
int sum = 0;
for(int i = 0 ; i < n ; i++){
for(int j = 0 ; j < n ; j++){
if(i != j){
if(h[i] == a[j]){
sum++;
}
}
}
}
return sum;
}
}
B問題は、ボタンが複数あって、間違った場合、やり直しになる。
操作プレイヤーはあってる順番は覚えていく。
最悪の場合何回押す必要があるか。
実際に例示をやって、後はパターン化する方式で。
import java.util.Scanner;
public class Main2 {
public static void main(String args[]){
Scanner input = new Scanner(System.in);
int n = input.nextInt();
if(n == 1){
System.out.println("1");
}else if(n == 2){
System.out.println("3");
}else if(n == 3){
System.out.println("7");
}else{
int sum = 7;
int offset = 4;
for(int i = 4 ; i <= n ; i++){
offset += i-1;
sum += offset;
}
System.out.println(sum);
}
}
}
C問題は、縦軸横軸で同じ点が出ないように点を好きな様に決めるという問題。
つまり、縦軸横軸で短い方+1の点ができる。
import java.util.Scanner;
public class Main2 {
public static void main(String args[]){
Scanner input = new Scanner(System.in);
int n = input.nextInt();
int m = input.nextInt();
if(n >= m){
System.out.println(m+1);
for(int i = 0 ; i <= m ; i++){
System.out.println(i+" "+(m-i));
}
}else{
System.out.println(n+1);
for(int i = 0 ; i <= n ; i++){
System.out.println(i+" "+(n-i));
}
}
}
}
D問題は最難関。読む気も起こらず。
E問題は、好きな曲と嫌いな曲があって、曲ごとに好きになる確率が書いてある。
嫌いな曲にあたると、好きな曲リストをひと通り聴いてから新しい曲を聴くという。
この時、期待値を最高にする並び順にして、期待値を出力せよという問題。
by ddrer-yossi | 2013-01-28 23:32 | codeforces