仕事とバルスとcodeforces#97

codeforcesは正確に言えば12/10です。
今日は仕事でした。
とはいえ頭の中はCodeChefのRobotで頭がいっぱいで、
昼休み中はずっとそれを考えていました。
結局実装してもTLEだったんですけどね。

f0019846_249491.jpg

というわけでお昼はキノコペペロンチーノ牛丼、今回は大盛りで。

夜はまたもついついフィギュアを取ってしまった。800円で2つ。
その後どうでもいいのに200円消費したので合計1000円。

f0019846_2514496.jpg

天使ちゃんです。

jubeatを数回プレーしたあと、バルスを見るために帰宅。
結局21時を少し過ぎましたが、バルスには余裕で間に合いました。

見終わったあと、codeforcesの準備へ。

A プレゼントをだれにあげたかという入力をもとに、
どういった具合で渡っているかを出力する。
たとえば2 3 4 1であれば、1さんは2へ。2さんは3へ。3さんは4へ。4さんは1へプレゼントを渡しているので、4 1 2 3を出力する。

import java.util.Scanner;

public class Test {

public static void main(String args[]){
Scanner input = new Scanner(System.in);
int n = input.nextInt();
int a[] = new int[n];
for(int i = 0 ; i < n ; i++){
a[i] = input.nextInt();
}
int[] sorted = numric(n,a);
for(int i = 0 ; i < sorted.length ; i++){
System.out.print(sorted[i]);
if(i != sorted.length-1){
System.out.print(" ");
}
}
}

public static int[] numric(int n,int[] a){
int sorta[] = new int[n];
for(int i = 0 ; i < a.length ; i++){
sorta[a[i]-1] = i+1;
}
return sorta;
}
}


B問題。完全実装問題。
A+B=C ただしAとCは三進数に変換する。
これを満たす最小のBを求める。ちなみに繰り上がりはなしというルール。

import java.util.Scanner;

public class Test {

public static void main(String args[]){
Scanner input = new Scanner(System.in);
int a = input.nextInt();
int c = input.nextInt();
System.out.println(numeric(a,c));
}

public static int numeric(int a,int c){
String af = Integer.toString(a,3);
String cf = Integer.toString(c,3);
int mt = Math.abs(af.length()-cf.length());
String ff = "";
for(int i = 0 ; i < mt ; i++){
ff += "0";
}
if(af.length() > cf.length()){
ff += cf;
cf = ff;
}else{
ff += af;
af = ff;
}
String b = "";
int ns = 0;
for(int i = 0 ; i < af.length(); i++){
ns = Character.digit(cf.charAt(i),10)-Character.digit(af.charAt(i),10);
if(ns == -2){
ns = 1;
}else if(ns == -1){
ns = 2;
}
b += ns+"";
}
return Integer.parseInt(b,3);
}

}

C 配列を1個だけ別の数字にいれかえて、より小さい順の配列を作ろうとするもの。
ただし、前と同じ数字、何も変えないということはできないとする。
つまり、1 1 1の場合は、嫌でも1個2にしなければいけないことになる。答えは1 1 2
んで、3 5 6 7 9とかの場合、9を1にして並び買えれば1 3 5 6 7が最小となる。
コーナーケースは最後が1の場合ぐらいだということに気づいて即答。

import java.util.Arrays;
import java.util.Scanner;

public class Test {

public static void main(String args[]){
Scanner input = new Scanner(System.in);
int n = input.nextInt();
int a[] = new int[n];
for(int i = 0 ; i < n ; i++){
a[i] = input.nextInt();
}
int[] sort = sorted(a,n);
for(int i = 0 ; i < n ; i++){
System.out.print(sort[i]);
if(i != n-1)System.out.print(" ");
}
}

public static int[] sorted(int[] a,int n){
Arrays.sort(a);
if(a[n-1] != 1){
a[n-1] = 1;
}else{
a[n-1] = 2;
}
Arrays.sort(a);
return a;
}
}

4問目は、8点の座標が与えられていて、長方形と正方形をそれぞれ区別する。
生成できないときはNoを返す。
総当りで行けるとおもったので書いていたのですが、
正方形の条件がうまく書けずにタイムオーバー。まあ、仕方ないね。
今回はレーティングが100近く上がりました。めでたしめでたし。

  by ddrer-yossi | 2011-12-09 23:47 | codeforces | Comments(0)

<< 皆既月食 サッカーと研究 >>

SEM SKIN - DESIGN by SEM EXE