Codeforces Beta Round #96 Div2

ということで今日はcodeforcesでした。
今回はマイナーなプログラムのお話の回でした。

A問題はHQ9+。この4つでプログラミングをするというお話ですが、出力があるかどうかを出すだけ。
注意すべきは+は出力を行わないということ。最初これをミスった。

import java.util.Scanner;

public class Test {

public static void main(String args[]){
Scanner input = new Scanner(System.in);
String s = input.nextLine();
System.out.println(calculate(s));
}

public static String calculate(String s){
for(int i = 0 ; i < s.length(); i++){
if(s.charAt(i) == 'H' || s.charAt(i) == 'Q' || s.charAt(i) == '9')return "YES";
}
return "NO";
}

}

B問題はUnaryという言語の問題。今度使うのは8文字。それぞれを2進数に変換したものを
つなぎあわせて最後は10進数に変換して1000003で割るという問題。
単純にアタマが悪いのでBigIntegerを使って対処しました。でも割と時間かかっちゃったんだよ・・・。

import java.math.BigInteger;
import java.util.Scanner;

public class Test {

public static void main(String args[]){
Scanner input = new Scanner(System.in);
String s = input.nextLine();
System.out.println(calculate(s));
}

public static String calculate(String s){
String st = "";
for(int i = 0 ; i < s.length(); i++){
if(s.charAt(i) == '>'){
st += "1000";
}else if(s.charAt(i) == '<'){
st += "1001";
}else if(s.charAt(i) == '+'){
st += "1010";
}else if(s.charAt(i) == '-'){
st += "1011";
}else if(s.charAt(i) == '.'){
st += "1100";
}else if(s.charAt(i) == ','){
st += "1101";
}else if(s.charAt(i) == '['){
st += "1110";
}else if(s.charAt(i) == ']'){
st += "1111";
}
}
BigInteger a = new BigInteger(st,2);
return (a.mod(BigInteger.valueOf(1000003))).toString();
}

}

最後はC問題。実は問題の意味を把握するのに1時間近くかかってしまいました。
完全に残念な感じ。一定の法則に従って数字を出力する問題でした。

import java.math.BigInteger;
import java.util.Scanner;

public class Test {

public static void main(String args[]){
Scanner input = new Scanner(System.in);
String s = input.nextLine();
calculate(s);
}

public static void calculate(String s){
int fnum = 0;
int knum = 0;
for(int i = 0 ; i < s.length(); i++){
String num = Integer.toBinaryString((int)s.charAt(i));
String rnum = "";
for(int j = num.length()-1 ; j >= 0 ; j--){
rnum += num.charAt(j);
}
for(int j = num.length() ; j < 8 ; j++){
rnum += "0";
}
int cnum = Integer.parseInt(rnum,2);
knum -= cnum;
if(knum < 0){
knum += 256;
}
System.out.println(knum);
knum = cnum;

}

}

}

Dはだるそうなので見ず、Eは問題を把握していたものの、既に10分しかなかったので
実装できませんでした。
Eは、FとTの文字が与えられていてFなら前進、Tなら180度回転で、
数回FTを入れ替えるという条件をもとに
最大の距離が幾つになるかを求める問題です。
今回は、頭で考えるというよりも、いかに速く実装するかという問題でした。

というのは夜中のお話で、今日は一日中c++の把握をしていました。
c++とjavaでのクラスの使われ方、そしてポインタなどの大きな違いなどがあり、
それを理解するだけでも大変でした。
なにせ、c++のコードを読み、改変する仕事が待っているので、やらないわけにはいかないのです。

夜はDDR。久々すぎて体があんまり動かなかった。

f0019846_0461422.jpg

  by ddrer-yossi | 2011-12-04 23:32 | codeforces | Comments(0)

<< 家で研究 AI作成? >>

SEM SKIN - DESIGN by SEM EXE