凹
すごく落ち込んだけども、ちゃんと、反省と対策をしなきゃいけない。
にゃー
div | Level | ProblemName | Status |
---|---|---|---|
2 | 250 | PalindromizationDiv2 | Passed System Test |
2 | 500 | LuckyRemainder | Opened |
2 | 1000 | NumberLabyrinthDiv2 | - |
X(0~100000の整数)が与えられたとき最も近い回文を求める問題。
僕が本業C++なのにコンテストでは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使うのアリだと思うけど、
本番時は控えよう。
というよりも、もっとたくさんコードを書いて、
ノウハウを増やそう。
ある数を分解したdigitの組み合わせの合計数を9で割ったときの余りを求めよ
という問題。
組み合わせで死亡。。
でも他の人のコードみたら、別に分解しなくても結局同じ数になったのかな。。
Krisalyn2013/02/18 17:15I am toatlly wowed and prepared to take the next step now.
aoocgac2013/02/19 02:06Zlynkz <a href="http://stapeihhwiwp.com/">stapeihhwiwp</a>
rtkahqqrn2013/02/21 14:11MaY8po <a href="http://aifcpbiitqcz.com/">aifcpbiitqcz</a>
jzxaowmmn2013/02/21 14:11lpYdR5 <a href="http://zloukuzedhjy.com/">zloukuzedhjy</a>
qbninervvgc2013/02/21 14:11vICORa <a href="http://ontrpypuglxq.com/">ontrpypuglxq</a>
jzxaowmmn2013/02/21 14:11lpYdR5 <a href="http://zloukuzedhjy.com/">zloukuzedhjy</a>
qbninervvgc2013/02/21 14:11vICORa <a href="http://ontrpypuglxq.com/">ontrpypuglxq</a>
26日ぶり、2回目の参戦でした。
前回の教訓は、
焦るあまりケース漏れや境界値が甘くてMiddle落とすのなら
Easyしか解けないのと点数同じになってしまうので、
着実に2問解こう!でした。
その結果・・・
div | Level | ProblemName | Status |
---|---|---|---|
2 | 250 | CubeAnts | Passed System Test |
2 | 500 | CubeStickers | Passed System Test |
2 | 1000 | CubeRoll | Opened |
目標通り2問解けたけど、1140->1082ぇ…。
ゆっくりし過ぎたら点数下がったよ\(^o^)/
あと、今回からEclipseCoderをいれた。
今まで、テストを1回ずつぽちぽち押してやっていたので凄く便利に。
また、今回は初めてChallengeしてみました。1回成功/1回失敗でした。
わりと簡単なケースで見つかったのでいい機会になった。
それと、きつねかわいい。
次回までの目標。
もっと速く解く。
終わった後に点数下がって落ち込まないようにする。
KaylynHome run! Great slugging with that anewsr!
duewotmvkjHWZFJD <a href="http://hfbpyquokvfh.com/">hfbpyquokvfh</a>
wvskffVaYbqf , [url=http://xqkudsjuelgw.com/]xqkudsjuelgw[/url], [link=http://vwtdinxsxwph.com/]vwtdinxsxwph[/link], http://qhrijbrdcyfh.com/
fdpaqapawczJjV5f6 , [url=http://zzqcflzylvxo.com/]zzqcflzylvxo[/url], [link=http://tiathbilssib.com/]tiathbilssib[/link], http://lyjxevtvrjeu.com/
チャットルームに色んな言葉話す人がenterしてくる雰囲気に圧巻されました。
SystemTestで悔しい><って思ったけども、これを教訓に頑張っていこうと思いました。
div | Level | ProblemName | Status |
---|---|---|---|
2 | 250 | SentenceCapitalizerInator | Passed System Test |
2 | 500 | PerfectSequences | Failed System Test |
2 | 900 | RectangleArea | Compiled |
0→1140
各センテンスの1文字目を大文字に変換してくださいという問題。
解くだけ。
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。
少し書いたけどちゃんとは終わらず、Compiledで終わった。
途中のしかアップしてない。
500で死亡。
1個以外全部同じ値のパターンを考えていなかった。(↓のmainメソッドの例)
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; } } }
詰めが甘いのか、時間に制約あると慌ててしまうのか、両方なのかな。
もうちょっと頭の回転速くなったり、危険を察知できるようになりたい。
きつねかわいいよ、きつね。
A | Bus Game | Accepted | 39分 |
---|---|---|---|
B | Colorful Field | Wrong answer on pretest 2 | 2時間 |
C | Beaver | Unopend | |
D | Password | Unopend | |
E | Security System | Unopend |
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]);
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; } } }
←デバッカをちゃんとつかおう!!!!!
GertVery true! Makes a change to see soemnoe spell it out like that. :)
orhfgftahcMYIY9W <a href="http://thnlvnshtrff.com/">thnlvnshtrff</a>
maabplpI9qiiZ , [url=http://jfyreimhazar.com/]jfyreimhazar[/url], [link=http://ropdykkagibg.com/]ropdykkagibg[/link], http://dyyssuyoepiz.com/
khstjqkfnzReK1CM , [url=http://sbovewwsjurt.com/]sbovewwsjurt[/url], [link=http://eproyirjwiim.com/]eproyirjwiim[/link], http://dpevejvhnvbt.com/
StarleighGood points all arnoud. Truly appreciated.
syywztvbLQ9SUs <a href="http://bytzusteydmc.com/">bytzusteydmc</a>
pzmgvuhmspk4EpGDV , [url=http://fxoekarczkyl.com/]fxoekarczkyl[/url], [link=http://visgwjrpgter.com/]visgwjrpgter[/link], http://pecsyfbrmojs.com/
cyzmkixpg3aGak <a href="http://isrszltpagij.com/">isrszltpagij</a>
ubgbmmvqtmWABjz , [url=http://uvresptxeaxw.com/]uvresptxeaxw[/url], [link=http://gxmzivwbmbow.com/]gxmzivwbmbow[/link], http://usofrjcumvnm.com/