Hatena::Grouptopcoder

(*/∇\*)  黒歴史恥ずかしい (*/∇\*)

Linux/C++組込みエンジニアですが、コンテストではJava使っています。
Profile: とぷこだ こどふぉ ページビュー:16525

2011-06-12

SRM509 div2 23:10 SRM509 div2 - (*/∇\*)   黒歴史恥ずかしい (*/∇\*)  を含むブックマーク はてなブックマーク - SRM509 div2 - (*/∇\*)   黒歴史恥ずかしい (*/∇\*)

すごく落ち込んだけども、ちゃんと、反省と対策をしなきゃいけない。

にゃー

divLevelProblemNameStatus
2250PalindromizationDiv2  Passed System Test
2500LuckyRemainder Opened
21000NumberLabyrinthDiv2 -

1問目

X(0~100000の整数)が与えられたとき最も近い回文を求める問題。

僕が本業C++なのにコンテストではJavaを使っている理由は、

API知識を一番持っているのがJavaだからである。

BigInteger万歳!!とか考え、その優位性を活かして

JavaAPIの無駄使いをしよう!と考えていた矢先だった。

こういう機会じゃなきゃ使わなそうなライブラリ。

StringBuffer/StringBuilderのreverseメソッド使えば回文判定楽勝じゃん!

時間はなんとかなるだろうと考え、実装。

private boolean kaibun(int X) {
    StringBuilder sb = new StringBuilder(X + "");
    return sb.reverse().equals(sb);
}

あれ、、うまくいかない、

としばらく悩み、Stringは不変オブジェクトだけども、

StringBuffer系は可変オブジェクトだったことに気付く、

メソッドコール時点でsbの値が変わっていることに気付き、

private boolean kaibun(int X) {
    StringBuilder sb = new StringBuilder(X + "");
    return sb.reverse().equals(new StringBuilder(X + ""));
}

とやるが、それでもうまくいかない。

諦めて、普通に文字列から文字一個ずつ取り出して、

比較することにした。

後日気付いたけども、StringBuffer/StringBuilderの

equalsメソッドは文字列一緒でもOKにはならない場合があるのね。

つまり、もしreverseメソッドで回文判定するんだとしたら

private boolean kaibun(int X) {
    StringBuilder sb = new StringBuilder(X + "");
    return sb.reverse().toString().equals(X + "");
}

こうしないといけない。

やられた><

まぁよくよく考えれば可変長文字列はcapacityとか変数持ってるしね。

反省点

練習時は使ったことないAPI使うのアリだと思うけど、

本番時は控えよう。

というよりも、もっとたくさんコードを書いて、

ノウハウを増やそう。

2問目

ある数を分解したdigitの組み合わせの合計数を9で割ったときの余りを求めよ

という問題。

組み合わせで死亡。。

でも他の人のコードみたら、別に分解しなくても結局同じ数になったのかな。。

KrisalynKrisalyn2013/02/18 17:15I am toatlly wowed and prepared to take the next step now.

aoocgacaoocgac2013/02/19 02:06Zlynkz <a href="http://stapeihhwiwp.com/">stapeihhwiwp</a>

rtkahqqrnrtkahqqrn2013/02/21 14:11MaY8po <a href="http://aifcpbiitqcz.com/">aifcpbiitqcz</a>

jzxaowmmnjzxaowmmn2013/02/21 14:11lpYdR5 <a href="http://zloukuzedhjy.com/">zloukuzedhjy</a>

qbninervvgcqbninervvgc2013/02/21 14:11vICORa <a href="http://ontrpypuglxq.com/">ontrpypuglxq</a>

jzxaowmmnjzxaowmmn2013/02/21 14:11lpYdR5 <a href="http://zloukuzedhjy.com/">zloukuzedhjy</a>

qbninervvgcqbninervvgc2013/02/21 14:11vICORa <a href="http://ontrpypuglxq.com/">ontrpypuglxq</a>

2011-05-29

SRM 507 div2 17:34 SRM 507 div2 - (*/∇\*)   黒歴史恥ずかしい (*/∇\*)  を含むブックマーク はてなブックマーク - SRM 507 div2 - (*/∇\*)   黒歴史恥ずかしい (*/∇\*)

26日ぶり、2回目の参戦でした。


前回の教訓は、

焦るあまりケース漏れや境界値が甘くてMiddle落とすのなら

Easyしか解けないのと点数同じになってしまうので、

着実に2問解こう!でした。



その結果・・・

divLevelProblemNameStatus
2250CubeAnts  Passed System Test
2500CubeStickers Passed System Test
21000CubeRoll Opened

目標通り2問解けたけど、1140->1082ぇ…。

ゆっくりし過ぎたら点数下がったよ\(^o^)/


あと、今回からEclipseCoderをいれた。

今まで、テストを1回ずつぽちぽち押してやっていたので凄く便利に。


また、今回は初めてChallengeしてみました。1回成功/1回失敗でした。

わりと簡単なケースで見つかったのでいい機会になった。


それと、きつねかわいい。



次回までの目標。

もっと速く解く。

終わった後に点数下がって落ち込まないようにする。

KaylynKaylyn2011/08/30 15:26Home run! Great slugging with that anewsr!

duewotmvkjduewotmvkj2011/09/01 01:49HWZFJD <a href="http://hfbpyquokvfh.com/">hfbpyquokvfh</a>

wvskffwvskff2011/09/01 16:26VaYbqf , [url=http://xqkudsjuelgw.com/]xqkudsjuelgw[/url], [link=http://vwtdinxsxwph.com/]vwtdinxsxwph[/link], http://qhrijbrdcyfh.com/

fdpaqapawczfdpaqapawcz2011/09/04 01:32JjV5f6 , [url=http://zzqcflzylvxo.com/]zzqcflzylvxo[/url], [link=http://tiathbilssib.com/]tiathbilssib[/link], http://lyjxevtvrjeu.com/

2011-05-03

SRM 505 とぷこだ初参加♪ 23:31 SRM 505 とぷこだ初参加♪ - (*/∇\*)   黒歴史恥ずかしい (*/∇\*)  を含むブックマーク はてなブックマーク - SRM 505 とぷこだ初参加♪ - (*/∇\*)   黒歴史恥ずかしい (*/∇\*)

感想

チャットルームに色んな言葉話す人がenterしてくる雰囲気に圧巻されました。

SystemTestで悔しい><って思ったけども、これを教訓に頑張っていこうと思いました。

divLevelProblemNameStatus
2250SentenceCapitalizerInator  Passed System Test
2500PerfectSequences Failed System Test
2900RectangleArea Compiled

0→1140

250

各センテンスの1文字目を大文字に変換してくださいという問題。

解くだけ。


500

seq[0]+seq[1]+seq[2]+・・・seq[49]==seq[0]*seq[1]*seq[2]*・・・seq[49]

かどうかチェックする問題。

ただし、seq[0]~seq[49]のどれか一つは値を変更すること。

という問題。

seq[n]=xと置換して一次方程式を50回回せばいいのかなと考えた。

seq[0]+seq[1]+・・・+seq[n-1]+seq[n+1]+・・・seq[50]+x=seq[0]*seq[1]*・・・*seq[n-1]*seq[n+1]*・・・seq[50]*x

x-(seq[0]*seq[1]*・・・*seq[n-1]*seq[n+1]*・・・seq[50]*x)=-(seq[0]+seq[1]+・・・+seq[n-1]+seq[n+1]+・・・seq[50])



ExsampleTestをやったら4番で×

これもちょこちょこっと変更してSubmit。


900

少し書いたけどちゃんとは終わらず、Compiledで終わった。

途中のしかアップしてない。

SystemTest

500で死亡。

1個以外全部同じ値のパターンを考えていなかった。(↓のmainメソッドの例)

500 修正後ソース

import java.math.BigInteger;

public class PerfectSequences{

    public static void main(String[] args) {
        PerfectSequences temp = new PerfectSequences();
         System.out.println(temp.fixIt(new int[]{1000000000, 1, 1,
         1, 1, 1, 1, 1, 1}));
        System.out.println(temp.fixIt(new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                                 0, 0, 0, 7774555, 0, 0, 0, 0,
                                                 0, 0, 0 }));
    }

    public String fixIt(int[] seq) {
        if (seq.length == 1) return "Yes";
        for (int i = 0; i < seq.length; i++) {
            if (check(seq, i)) {
                return "Yes";
            }
        }
        return "No";
    }

    private BigInteger MAX = new BigInteger("1000000000");

    private boolean check(int seq[], int n) {
        BigInteger sum = new BigInteger("0");
        BigInteger mul = new BigInteger("1");
        for (int i = 0; i < seq.length; i++) {
            if (n == i) continue;
            if (seq[i] < 0) return false;
            sum = sum.add(new BigInteger(seq[i] + ""));
            mul = mul.multiply(new BigInteger(seq[i] + ""));
        }
        if (mul.subtract(BigInteger.ONE).equals(BigInteger.ZERO)) {
            return false;
        }
        BigInteger mod = sum.mod(mul.subtract(BigInteger.ONE).abs());
        BigInteger div = sum.divide(mul.subtract(BigInteger.ONE));
        if (mod.equals(BigInteger.ZERO) && div.compareTo(MAX) <= 0
                && div.compareTo(BigInteger.ZERO) >= 0) {
            if (new BigInteger(seq[n] + "").equals(div)) {
                return false;
            } else {
                return true;
            }
        } else {
            return false;
        }
    }
}

詰めが甘いのか、時間に制約あると慌ててしまうのか、両方なのかな。

もうちょっと頭の回転速くなったり、危険を察知できるようになりたい。

2011-05-01

Codeforces Beta Round #71 16:22 Codeforces Beta Round #71 - (*/∇\*)   黒歴史恥ずかしい (*/∇\*)  を含むブックマーク はてなブックマーク - Codeforces Beta Round #71 - (*/∇\*)   黒歴史恥ずかしい (*/∇\*)

きつねかわいいよ、きつね。


ABus GameAccepted39分
BColorful FieldWrong answer on pretest 22時間
CBeaverUnopend
DPasswordUnopend
ESecurity SystemUnopend

BでFieldを0,0始まりとみなしたコーディングをしてしまって死亡。

最初、SampleTestで結果が一個ずつズレて出力されたので、

Arrays.binarySearchのJavadocの記載にある「検索キーがリストにない場合は (-(挿入ポイント) - 1)」

の-1が原因かな?と思って、Wasteのoffsetを1ずらしてsubmit。

そしたらWAで悩み続けてタイムアウト。

試験終わってから、offsetをずらさないでも良かったことに気づき、

代わりに配列をゼロ始まりで計算しちゃってることに気付き、

修正。

wasteTbl[i] = (Integer.parseInt(args[0]))*m + Integer.parseInt(args[1]);
↓
wasteTbl[i] = (Integer.parseInt(args[0])-1)*m + Integer.parseInt(args[1]);

B ソース

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Problem71B{

    public static void main(String argaaaaa[]) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String line = br.readLine();
        
        String args[] = line.split(" ");
        if(args.length != 4) {
            return;
        }
        int n = Integer.parseInt(args[0]);
        int m = Integer.parseInt(args[1]);
        int k = Integer.parseInt(args[2]);
        int t = Integer.parseInt(args[3]);
        
        int wasteTbl[] = new int[k];
        for(int i = 0; i < k; i++) {
            line = br.readLine();
            args = line.split(" ");
            wasteTbl[i] = (Integer.parseInt(args[0])-1)*m + Integer.parseInt(args[1]);
        }
        Arrays.sort(wasteTbl);
        
        for(int i = 0; i < t; i++) {
            line = br.readLine();
            args = line.split(" ");
            int p = (Integer.parseInt(args[0])-1)*m + Integer.parseInt(args[1]);
            binsearch(wasteTbl, p);
        }
    }

    private static void binsearch(int tbl[], int p) {
        int offset = Arrays.binarySearch(tbl, p);
        if(offset < 0) {
        } else {
           System.out.println("Waste");
           return;
        }
        
        int item = p + offset;
        switch(item % 3) {
        case 0:
            System.out.println("Carrots");
            return;
        case 1:
            System.out.println("Kiwis");
            return;
        case 2:
            System.out.println("Grapes");
            return;
        }
    }
}


←デバッカをちゃんとつかおう!!!!!

会社入ってから 15:56 会社入ってから - (*/∇\*)   黒歴史恥ずかしい (*/∇\*)  を含むブックマーク はてなブックマーク - 会社入ってから - (*/∇\*)   黒歴史恥ずかしい (*/∇\*)

いつのまにか、ライブラリAとライブラリBをくっつけるだけの仕事とか、

Excelのショートカット知識だけ充実していってて、

気が付いたらダメダメになっていたので、

おうちでも定期的にプログラム書いていくことにした。


過去問をちょっと触った感じだと、

かなりのダメダメさに凹む状況でしたが、

よろしくお願いいたします。


といいつつ、チラシの裏化しそう。

GertGert2011/08/31 23:14Very true! Makes a change to see soemnoe spell it out like that. :)

orhfgftahcorhfgftahc2011/09/01 01:50MYIY9W <a href="http://thnlvnshtrff.com/">thnlvnshtrff</a>

maabplpmaabplp2011/09/02 20:43I9qiiZ , [url=http://jfyreimhazar.com/]jfyreimhazar[/url], [link=http://ropdykkagibg.com/]ropdykkagibg[/link], http://dyyssuyoepiz.com/

khstjqkfnzkhstjqkfnz2011/09/04 01:58ReK1CM , [url=http://sbovewwsjurt.com/]sbovewwsjurt[/url], [link=http://eproyirjwiim.com/]eproyirjwiim[/link], http://dpevejvhnvbt.com/

StarleighStarleigh2012/11/14 17:00Good points all arnoud. Truly appreciated.

syywztvbsyywztvb2012/11/15 12:05LQ9SUs <a href="http://bytzusteydmc.com/">bytzusteydmc</a>

pzmgvuhmspkpzmgvuhmspk2012/11/16 10:274EpGDV , [url=http://fxoekarczkyl.com/]fxoekarczkyl[/url], [link=http://visgwjrpgter.com/]visgwjrpgter[/link], http://pecsyfbrmojs.com/

cyzmkixpcyzmkixp2012/11/17 11:12g3aGak <a href="http://isrszltpagij.com/">isrszltpagij</a>

ubgbmmvqtubgbmmvqt2012/11/17 20:47mWABjz , [url=http://uvresptxeaxw.com/]uvresptxeaxw[/url], [link=http://gxmzivwbmbow.com/]gxmzivwbmbow[/link], http://usofrjcumvnm.com/