<   2013年 02月 ( 28 )   > この月の画像一覧

 

ポップンガチ勢+Codeforces #170

今日はビーマニも少しやりつつ、アーティストマッチングがあるので、
16時からポップンに集中。
昨日はマッチング用ウィンドウの存在を知らずに全敗していたが、
今回はどうなることやら。

f0019846_2323593.jpg


f0019846_23241873.jpg


f0019846_23243839.jpg

96さんとマッチング!上位陣フルボッコである

f0019846_23253567.jpg

二回マッチングしたが、オーバーキルである。

f0019846_2326923.jpg


f0019846_23263497.jpg

高難易度で1位

f0019846_23265818.jpg


f0019846_2327197.jpg

クリアしたけどあかん。

その後は何度も再起動がかかりました。中身はWindows XP。
f0019846_23275157.jpg


f0019846_23282265.jpg


f0019846_23284139.jpg

熱い勝負

f0019846_2329418.jpg

MSPさん強キャラだわーw

f0019846_23293077.jpg


f0019846_23295192.jpg


f0019846_23301352.jpg

6.00初かな。

f0019846_2330331.jpg

成仏初見

ひたすらプレミアムフリーで龍デコに粘着するも、最後で敗れる。

ポップンはこうなった。
1位:16
2位:24
3位:16
4位:12
5位:12
6位:1

圧倒的2位率・・・!

帰宅後はcodeforces #170に参加。

A問題は、配列が与えられてて、それがai~ai+1の距離となっている。
山手線のように環状になっている場合の、AからBまでの最短距離を求めよという問題。
どっちが最短になるかわからないなら両方共判定して、短い方を取ってやれば良いのです。


import java.util.Scanner;

public class Main2 {

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 s = input.nextInt();
int g = input.nextInt();
System.out.println(count(n,a,s,g));
}

public static int count(int n,int[] a,int s,int g){
int tmp1 = 0;
int ts = s;
int tg = g;
while(ts != tg){
if(ts == n+1){
ts = 1;
}else{
tmp1 += a[ts-1];
ts++;
}
}
ts = s;
tg = g;
int tmp2 = 0;
while(ts != tg){
ts--;
if(ts == 0){
ts = n;
}
tmp2 += a[ts-1];
}
return Math.min(tmp1, tmp2);
}

}


Bは、本のタイトルとしていくつか与えられていて、部分文字列として使われてなくて、
辞書順最短の文字列を求めるという問題。
nが30程度、長さも最大20なので、全部調べあげていく方針で良い。
しかし、書くのが結構面倒。


import java.util.Scanner;

public class Main2 {

public static void main(String args[]){
Scanner input = new Scanner(System.in);
int n = input.nextInt();
String[] st = new String[n];
for(int i = 0 ; i < n ; i++){
st[i] = input.next();
}
System.out.println(count(n,st));
}

public static String count(int n,String[] st){
int index = 1;
while(true){
if(index % 27 == 0)index++;
int tmp = index;
StringBuilder sb = new StringBuilder();
String s = Integer.toString(tmp,27);
for(int i = 0 ; i < s.length() ; i++){
if(49 <= s.charAt(i) && s.charAt(i) <= 57){
sb.append((char)(s.charAt(i)+48));
}else{
sb.append((char)(s.charAt(i)+9));
}
}
boolean flag = true;
for(int i = 0 ; i < n ; i++){
if(st[i].indexOf(sb.toString()) != -1){
flag = false;
break;
}
}
if(flag)return sb.toString();
index++;
}

}

}


Cは、人によって喋れる言語が違うので、
それぞれ通じ合える共通になるグループをクラスタリングしてあげる。
そのグループの大きさ-1が答えになる。
Union-findでもできる。




import java.util.ArrayList;
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();
input.nextLine();
String[] st = new String[n];
for(int i = 0 ; i < n ; i++){
st[i] = input.nextLine();
}
System.out.println(count(n,m,st));
}

public static int count(int n,int m,String[] st){
int maxlanguage = 0;
int[] languagen = new int[n];
int[] numbered = new int[n];

for(int i = 0 ; i < n ; i++){
maxlanguage = Math.max(maxlanguage,Integer.parseInt(st[i].split(" ")[0]));
}
if(maxlanguage == 0){
return n;
}

int[][] languages = new int[n][maxlanguage];
for(int i = 0 ; i < n ; i++){
String[] str = st[i].split(" ");
int languagenum = Integer.parseInt(str[0]);
languagen[i] = languagenum;
for(int j = 0 ; j < languagenum ; j++){
languages[i][j] = Integer.parseInt(str[j+1]);
}
}

int index = 1;
for(int i = 0 ; i < n ; i++){
numbered[i] = index;
for(int k = 0 ; k < n ; k++){
boolean flags = false;
for(int j = 0 ; j < languages[i].length ; j++){
for(int l = 0 ; l < languages[k].length ; l++){
if(i != k && languages[i][j] != 0 && languages[i][j] == languages[k][l]){
if(numbered[k] == 0){
numbered[k] = index;
}else{
for(int h = 0 ; h < n ; h++){
if(i != h && numbered[h] == numbered[i])numbered[h] = numbered[k];
}
numbered[i] = numbered[k];
}
flags = true;
break;
}
}
if(flags)break;
}
}
index++;
}
ArrayList groups = new ArrayList();
for(int i = 0 ; i < n ; i++){
if(!groups.contains(numbered[i]))groups.add(numbered[i]);
}
return groups.size()-1;
}

}

  by ddrer-yossi | 2013-02-28 23:20 | codeforces | Comments(0)

pop'nアーティストマッチング

今日は午前中は数学ガールを読み、午後からはアーティストマッチングということで、
ゲーセンに行ってポップンメインでやる。
しかし、この日は闇雲に対戦するだけになってしまった。

f0019846_0243434.jpg


f0019846_0244655.jpg


f0019846_025259.jpg


仕方ないのでcafe de tranを進める。

f0019846_0252988.jpg


f0019846_0255046.jpg


f0019846_02649.jpg

久々にやるほうがS乗りますねー。

f0019846_0262417.jpg


f0019846_0263868.jpg


f0019846_027769.jpg

悔しいのでSS乗せ。

f0019846_0272410.jpg


帰宅後はCSEMPをプレー。
f0019846_0283519.jpg

黒スムーチとか。

夜食にペヤングカレー味を食べた。辛さはやはり激辛のほうが強いけど、
こちらも大概。

  by ddrer-yossi | 2013-02-27 23:21 | pop'n music | Comments(0)

ダーティ難とか、SKYDP九段とか、天鳳四暗刻とか

今日は14時に説明会、その後はゲーセン。

まずは浄化。序盤ゲー。
f0019846_0542422.jpg


サクスト難。ラスゲー。
f0019846_0544789.jpg


スクスカは余裕でした(?)
f0019846_0551877.jpg


ダーティがクリアできない
f0019846_0561844.jpg


スカも銅◆に。
f0019846_0563953.jpg


長い粘着の末ダーティ難ついた。
f0019846_057397.jpg


帰宅後は家庭用HAPPYSKYでDPプレー。
f0019846_057591.jpg

ぎりぎりの九段!

f0019846_0582765.jpg

こっちは駄目だったー。

そして今日は天鳳で四暗刻を上がりました。
f0019846_11591.png


下家が鳴きまくってるのでこれはノーチャンかなと思ったら・・・。
当たり牌を見逃してツモるというガチ勢っぷり。

  by ddrer-yossi | 2013-02-26 23:31 | Beatmania | Comments(0)

CSEMP DP八段取得。

今日は某所のアレを書き書きして、
夜は謎解きバトルTOREを見てた。
TIPの略が何なのかとか。To Inquire Promptnessで、
もともとはコーヒーなどを早く持ってきてもらうためだったらしい。

夜はDP☆10あたりをプレー。
少しずつ埋められるようになってきたかもしれない。

f0019846_1143324.jpg


f0019846_1144329.jpg


f0019846_115672.jpg

最後の八段も漸く。後はゲーセンのみ。

f0019846_1155972.jpg

九段の壁は厚い

  by ddrer-yossi | 2013-02-25 23:03 | Beatmania | Comments(0)

Codeforces Round #169、DistorteD DP八段

どこまで放置できるかーというのもアレなので・・・。
今日は弐寺DPを中心にプレー。
DistorteDで八段を取得。
f0019846_1715295.jpg

Emp八段は相変わらずTuriiで苦戦。ここを突破するも、
3曲目のラストに阻まれて投げ出したくなったのでDPやめる。

他にもB4Uリミ、Jack黒、Just a little smile、ノーティ黒、ネオジェネ黒などがクリアできたので、
好調を確信してゲーセンへ。
f0019846_1725597.jpg


f0019846_1732067.jpg


f0019846_1733244.jpg


f0019846_1734670.jpg


f0019846_174347.jpg


取り敢えずdivaの残りのeasyをこなす。
f0019846_1745569.jpg


f0019846_175919.jpg


その後は難をつけるのにはpremium freeで、
ノマゲ埋めはstep upという風に使い分けてプレーする。

f0019846_1755976.jpg


12初難はSpecial Summer Campaignに。
gigadelicもやってみたものの、ラストでダメでした。

f0019846_1763980.jpg

CONTRACTつけたり、スクリプH、このターンに俺のすべてをかける、programmed world、programmed sunにノマゲつける、などして順調に未クリアを減らした。残41である。

満足したので締めにmaimai。
f0019846_1781746.jpg


f0019846_1782675.jpg

甘い罠は3リトライ。

帰宅後もちょいちょいビーマニに。
f0019846_179252.jpg


f0019846_1791239.jpg


終了後はcodeforcesをやってました。ABD解きですが順位はあまりよくなかったです。

A・・・満足度が一番高くなる店の満足度を、全探索で求めるだけ。
マイナスもあることを忘れて1WA



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

public class Main2 {

public static void main(String args[]){
Scanner input = new Scanner(System.in);
int n = input.nextInt();
int k = input.nextInt();
int[] f = new int[n];
int[] t = new int[n];
for(int i = 0 ; i < n ; i++){
f[i] = input.nextInt();
t[i] = input.nextInt();
}
System.out.println(count(n,k,f,t));
}

public static int count(int n,int k,int[] f,int[] t){
int maxf = -2099999999;
for(int i = 0 ; i < n ; i++){
if(t[i] <= k){
maxf = Math.max(maxf, f[i]);
}else{
maxf = Math.max(maxf,f[i]-(t[i]-k));
}
}
return maxf;
}

}


B、毎回回文になるか並べ替えて調べて回文であれば勝利、でなければ1文字排除するという問題。
実際には並べ替える必要はなく、文字が奇数個ある文字がいくつあるかで場合分けする。
0の場合と奇数の場合は先手勝利。0以外の偶数であれば後手勝利に。


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

public class Main2 {

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

public static String count(String s){
int[] count = new int[26];
for(int i = 0 ; i < s.length() ; i++){
count[s.charAt(i)-97]++;
}
int odds = 0;
for(int i = count.length-1 ; i >= 0 ; i--){
if(count[i] % 2 == 1)odds++;
}
if(odds % 2 == 1 || odds == 0){
return "First";
}else{
return "Second";
}
}

}


C、オーダをO(n^2)から落とせる気配がなく大苦戦。
というかここで1時間以上無駄にしたので、解けないとわかったならすぐにDに行くべきでした。
解答は後ほど教わった方法(imos法)を使って解いたもの。


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

public class Main2 {

public static void main(String args[]){
Scanner input = new Scanner(System.in);
int n = input.nextInt();
int q = input.nextInt();
int[] a = new int[n];
for(int i = 0 ; i < n ; i++){
a[i] = input.nextInt();
}
int[] s = new int[q];
int[] e = new int[q];
for(int i = 0 ; i < q ; i++){
s[i] = input.nextInt();
e[i] = input.nextInt();
}
System.out.println(count(n,q,a,s,e));
}

public static long count(int n,int q,int[] a,int[] s,int[] e){
Arrays.sort(a);
int[] counter = new int[n+1];
long sum = 0;

for(int i = 0 ; i < q ; i++){
counter[s[i]-1]++;
counter[e[i]]--;
}
int[] ncounter = new int[n];
int csum = 0;
for(int i = 0 ; i < counter.length-1 ; i++){
csum += counter[i];
ncounter[i] = csum;
}
Arrays.sort(ncounter);
for(int i = ncounter.length-1 ; i >= 0 ; i--){
sum += (long)ncounter[i]*a[i];
}
return sum;
}

}


問題自体は簡単です。区間がいくつか与えられていて、
数列を並び替えておいて区間にそれぞれ適用して最大になるような和を求める問題です。

D,数値のstartとendが与えられていて、その排他的論理和で作られる最大値を求める。
これはstartとendのビットをそれぞれ上位から比較して、1,0または0,1になるようなところで打ち切って、
他のビットを全部1にした値を求めるだけ。気づけてよかった。

import java.util.Scanner;

public class Main2 {

public static void main(String args[]){
Scanner input = new Scanner(System.in);
long s = input.nextLong();
long e = input.nextLong();
System.out.println(count(s,e));
}

public static long count(long s,long e){
int ncount = 0;
long es = e;
while(es != 0){
es /= 2;
ncount++;
}
while(ncount >= 0){
if(((s>>ncount-1)&1) == 1 && ((e>>ncount-1)&1) == 0 || ((s>>ncount-1)&1) == 0 && ((e>>ncount-1)&1) == 1){
break;
}
ncount--;
}
if(ncount >= 0){
return (long)Math.pow(2, ncount)-1;
}else{
return 0;
}
}

}

  by ddrer-yossi | 2013-02-24 23:00 | 日常生活 | Comments(0)

とある会合へ。6時間近く・・・。

今日は都内某所で自己紹介を含めての会議に参加しました。
途中で自己紹介用のプレゼン資料を持っていくのを忘れてきたことに気づいて絶望。
その場しのぎで5分程度のものを作って間に合わせた。
なんだかんだ20時近くまでやっていたのですが、収穫はなんとも言えない感じでした。
いやむしろ残念だったかもしれません。

地元に戻り、ビーマニでもすっかなーとおもいきや、混んでしまったのでDivaのコンテストをこなす。

f0019846_17244387.jpg


f0019846_1725278.jpg


f0019846_1725102.jpg


f0019846_17251761.jpg


帰宅後は池上解説をちょろっと見て、TCOは登録できず断念して速攻で寝ました。

  by ddrer-yossi | 2013-02-23 17:22 | 日常生活 | Comments(0)

プログラム確認したり秋葉行ったり千葉県行ったり

今日朝、自分の作っていたプログラムがどう動いているのか再確認しつつ、
15時頃に秋葉に赴く。

そこでお会いした方とbeatmania、jubeat、リフレク、サンボルあたりで遊ぶ。

f0019846_17313754.jpg


f0019846_17314339.jpg


jubeatは久々にプレーして更新がかかる。

リフレクは難易度9を久々にやってフルコンしちゃう程度の能力ぐらいはあるらしい。

f0019846_1732124.jpg


f0019846_17321832.jpg


f0019846_17322512.jpg


終了後は、千葉県某所へ向かう。

おしゃれな感じのお店です。
f0019846_1734317.jpg


f0019846_1734726.jpg


f0019846_1734149.jpg


f0019846_17344864.jpg


f0019846_17345488.jpg


f0019846_1735193.jpg


f0019846_17351449.jpg


f0019846_17352161.jpg


f0019846_1735279.jpg


あっという間に3時間は過ぎてしまい、その後はゲーセンへ。
しかしそれなりに飲んでいたせいか、jubeatはマイナス7万点は落ちて行きました。
リフレクもぐだぐだ。ダンエボメインにやっていたという謎の流れになりました。

  by ddrer-yossi | 2013-02-22 23:26 | 日常生活 | Comments(0)

Beatmania GOLD SP9段取得。新しい端末へ。

今日朝は23日に向けての自己PR用資料を作りました。
お昼からはひたすらビーマニ。

まずはHappySkyのDP八段を取りに行く。
1回3曲目で落ちたものの、2回目で取りました。

f0019846_17413172.jpg


その後はSPに切り替えてプレー。
INAZUMAとストロングイェーガーとJust a little smile、1100%にノマゲがついた。

f0019846_17422193.jpg


f0019846_17422933.jpg


f0019846_17425192.jpg


f0019846_17431165.jpg


今度はソフトを切り替えてGOLDのDPに挑戦。八段はあっさり。(ギリギリですが

f0019846_1744983.jpg


これは地力上がってるしもしやいけるのではとSPに切り替えて九段に挑戦。
5回ほど落ちるも、全部ラスぐらいまで行っているので行けると確信。そしてとうとう・・・。

f0019846_1745273.jpg


f0019846_17452373.jpg


達成率がおかしい・・・。このまま最後の砦、DJT九段も取ってしまおうと思いましたが、
やはりラストに阻まれて死んでいく。
f0019846_1746162.jpg


でまあ、ゲーセン行くかーと思った所で、新しい端末が届きました。
必要なソフト等を1時間程度で導入して、いざゲーセンへ。

ビーマニは混んでいたのであまりやりませんでした。
コンテストが開催されているのでdivaへ。

f0019846_1748238.jpg


f0019846_17483942.jpg


just a little smile、INAZUMA、イェーガー(難)をざっとクリアしていきました。
f0019846_17484538.jpg

  by ddrer-yossi | 2013-02-21 23:39 | Beatmania | Comments(0)

壊れたスマホからデータを取り出す、Codeforces Round #168

今日は朝にauショップへ赴き、スマホの交換を要請しました。
でないと使いものにならないので。
やはり、本体のデータがすべて消えることを宣告されました。
画面見えないので何も取り出せない・・・ということでかなり絶望してました。

そのせいか、ゲーセンに行ってもぐだぐだ。
蠍火、ZEDに難がついたぐらい。
ちなみにZEDプレー中に画面が止まり死んでしまったので、
店員にpremium free中に落ちたことを説明し、3クレ頂いたのですが、
これをstep up、STANDARD(2曲目落ち)、STANDARD(2曲目落ち)と
盛大にやらかしてました。意味ない・・・。

なんとかできないものかといろいろ探ってみると、Moboroboというソフトで
データマネージャを起動できるんだとか。
早速入れてみる。で、よく見るとUSBデバッグをONにしなきゃいけないらしい。
実は、数カ月前ですが、Titaniumで開発を行なっていた時にONにしていた。
これが功を奏して、写真、連絡先、SMSメール、アプリの取り出しに成功した。
しかし、ezwebのメールはどうしても取り出せずに断念。
こうなった場合に備えてUSBデバッグをONにしておくのが良いように思えますが、
他人がロックを解除せずに不正に操作することもできてしまうので、考える必要があります。

後は結城さんのチョコレート問題を解いていたのですが、何故か送信していなかったらしく・・・。
合っているというフィードバックは得ることができたので載せます。

56412637156759097412131861x63634925160141537479761109x78185498323479435878944223

アルゴリズムは次の方針です。
1,素因数分解して配列に格納する。
2,大きい数から3つ取る。
3,大きい数から4番目から順番に3つの数で一番小さい数を見つけては掛け算をする。
4,3をすべて行った後に出力する。

コードは以下のとおりです。

import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.math.BigInteger;
import java.util.Scanner;

public class Choco {

public static void main(String args[]) throws Exception{
Scanner input = new Scanner(new FileReader("../nick/problem.txt"));
PrintWriter pw = new PrintWriter(new FileWriter("../nick/output.txt"));
BigInteger bigInt=new BigInteger(input.nextLine());

/*素因数分解処理
BigInteger i = new BigInteger("162425297");
while(!bigInt.equals(i)){
if(bigInt.mod(i).equals(new BigInteger("0"))){
bigInt = bigInt.divide(i);
System.out.println(i+","+bigInt);
}else{
i = i.add(new BigInteger("2"));
}
}
*/

//素因数 is
//162425297
//215940091
//358456949
//369941863
//369941863
//479871607
//706170617
//481362815814826159

//検算
System.out.println(new BigInteger("162425297").multiply(new BigInteger("215940091").multiply(new BigInteger("358456949").multiply(new BigInteger("369941863")).multiply(new BigInteger("369941863")).multiply(new BigInteger("479871607")).multiply(new BigInteger("706170617")).multiply(new BigInteger("481362815814826159")))).toString(10));

BigInteger[] bigprimes = new BigInteger[8];
bigprimes[0] = new BigInteger("162425297");
bigprimes[1] = new BigInteger("215940091");
bigprimes[2] = new BigInteger("358456949");
bigprimes[3] = new BigInteger("369941863");
bigprimes[4] = new BigInteger("369941863");
bigprimes[5] = new BigInteger("479871607");
bigprimes[6] = new BigInteger("706170617");
bigprimes[7] = new BigInteger("481362815814826159");

BigInteger a = bigprimes[7];
BigInteger b = bigprimes[6];
BigInteger c = bigprimes[5];
for(int i = 4 ; i >= 0 ; i--){
if(a.compareTo(b) == -1 && a.compareTo(c) == -1){
a = a.multiply(bigprimes[i]);
}else if(b.compareTo(a) == -1 && b.compareTo(c) == -1){
b = b.multiply(bigprimes[i]);
}else if(c.compareTo(a) == -1 && c.compareTo(b) == -1){
c = c.multiply(bigprimes[i]);
}
}

if(a.compareTo(b) == -1 && a.compareTo(c) == -1){
if(b.compareTo(c) == -1){
System.out.println(a+"x"+b+"x"+c);
}else{
System.out.println(a+"x"+c+"x"+b);
}
}else if(b.compareTo(a) == -1 && b.compareTo(c) == -1){
if(a.compareTo(c) == -1){
System.out.println(b+"x"+a+"x"+c);
}else{
System.out.println(b+"x"+c+"x"+a);
}
}else if(c.compareTo(a) == -1 && c.compareTo(b) == -1){
if(a.compareTo(b) == -1){
System.out.println(c+"x"+a+"x"+b);
}else{
System.out.println(c+"x"+b+"x"+a);
}
}

//検算
//System.out.println(new BigInteger("56412637156759097412131861").multiply(new BigInteger("63634925160141537479761109").multiply(new BigInteger("78185498323479435878944223"))));

input.close();
pw.println();
pw.flush();
pw.close();
}
}


夜はCodeforcesへ。

Aは3*3マスあって、スイッチを押すと上下左右もスイッチが押される。
最初は押された状態で、何回か押したらスイッチがどのような状態になっているかという問題。
堅実シミュレートでも良かったんじゃないかと思う。ソースは汚い。やるだけ。

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

public class Main2 {

public static void main(String args[]){
Scanner input = new Scanner(System.in);
int[] n = new int[9];
for(int i = 0 ; i < 9 ; i++){
n[i] = input.nextInt();
}
count(n);
}

public static void count(int[] n){
int[] switched = {1,1,1,1,1,1,1,1,1};
for(int i = 0 ; i < 9 ; i++){
switch(i){
case 0:
if(n[i] % 2 == 1){
switched[0]++;
switched[1]++;
switched[3]++;
}
break;
case 1:
if(n[i] % 2 == 1){
switched[0]++;
switched[1]++;
switched[2]++;
switched[4]++;
}
break;
case 2:
if(n[i] % 2 == 1){
switched[1]++;
switched[2]++;
switched[5]++;
}
break;
case 3:
if(n[i] % 2 == 1){
switched[0]++;
switched[3]++;
switched[4]++;
switched[6]++;
}
break;
case 4:
if(n[i] % 2 == 1){
switched[1]++;
switched[3]++;
switched[4]++;
switched[5]++;
switched[7]++;
}
break;
case 5:
if(n[i] % 2 == 1){
switched[2]++;
switched[4]++;
switched[5]++;
switched[8]++;
}
break;
case 6:
if(n[i] % 2 == 1){
switched[3]++;
switched[6]++;
switched[7]++;
}
break;
case 7:
if(n[i] % 2 == 1){
switched[4]++;
switched[6]++;
switched[7]++;
switched[8]++;
}
break;
case 8:
if(n[i] % 2 == 1){
switched[5]++;
switched[7]++;
switched[8]++;
}
break;
}
}
System.out.println(switched[0] % 2+""+switched[1] % 2+""+switched[2] % 2);
System.out.println(switched[3] % 2+""+switched[4] % 2+""+switched[5] % 2);
System.out.println(switched[6] % 2+""+switched[7] % 2+""+switched[8] % 2);
}

}


B問題は、割かし難易度高め。黒いタイルと白いタイルがあり、どの黒いタイルからも、
曲がる回数1回で他のタイルにたどり着けるかどうかという問題。
再帰関数を用いてゴリゴリ書きました。割と自信作。

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

public class Main2 {

public static void main(String args[]){
Scanner input = new Scanner(System.in);
int r = input.nextInt();
int c = input.nextInt();
String[] st = new String[r];
for(int i = 0 ; i < r ; i++){
st[i] = input.next();
}
System.out.println(count(r,c,st));
}

public static String count(int r,int c,String[] st){
int bcount = 0;


for(int i = 0 ; i < st.length ; i++){
for(int j = 0 ; j < st[i].length(); j++){
if(st[i].charAt(j) == 'B')bcount++;
}
}

int[] stx = new int[bcount];
int[] sty = new int[bcount];

int index = 0;
for(int i = 0 ; i < st.length ; i++){
for(int j = 0 ; j < st[i].length(); j++){
if(st[i].charAt(j) == 'B'){
stx[index] = j;
sty[index] = i;
index++;
}
}
}
boolean isok = true;
for(int i = 0 ; i < bcount ; i++){
boolean[][] searched = new boolean[r][c];
//ccount[sty[i]][stx[i]] = 0;
if(!(bcount == blackcounter(r,c,stx[i],sty[i],st,searched,-1,0))){
isok = false;
break;
}
//System.out.println(blackcounter(r,c,stx[i],sty[i],st,searched,-1,0));
}
if(isok){
return "YES";
}else{
return "NO";
}
}

public static int blackcounter(int r,int c,int stx,int sty,String[] st,boolean[][] searched,int direction,int count){
if(stx < 0 || stx >= c || sty < 0 || sty >= r || count == 3)return 0;
if(st[sty].charAt(stx) == 'B'){
int num = 0;
if(!searched[sty][stx])num++;
searched[sty][stx] = true;
if(direction == -1){
return num+blackcounter(r,c,stx-1,sty,st,searched,0,1)+blackcounter(r,c,stx+1,sty,st,searched,2,1)+blackcounter(r,c,stx,sty-1,st,searched,1,1)+blackcounter(r,c,stx,sty+1,st,searched,3,1);
}else if(direction == 0){
return num+blackcounter(r,c,stx-1,sty,st,searched,0,count)+blackcounter(r,c,stx+1,sty,st,searched,2,count+1)+blackcounter(r,c,stx,sty-1,st,searched,1,count+1)+blackcounter(r,c,stx,sty+1,st,searched,3,count+1);
}else if(direction == 1){
return num+blackcounter(r,c,stx-1,sty,st,searched,0,count+1)+blackcounter(r,c,stx+1,sty,st,searched,2,count+1)+blackcounter(r,c,stx,sty-1,st,searched,1,count)+blackcounter(r,c,stx,sty+1,st,searched,3,count+1);
}else if(direction == 2){
return num+blackcounter(r,c,stx-1,sty,st,searched,0,count+1)+blackcounter(r,c,stx+1,sty,st,searched,2,count)+blackcounter(r,c,stx,sty-1,st,searched,1,count+1)+blackcounter(r,c,stx,sty+1,st,searched,3,count+1);
}else if(direction == 3){
return num+blackcounter(r,c,stx-1,sty,st,searched,0,count+1)+blackcounter(r,c,stx+1,sty,st,searched,2,count+1)+blackcounter(r,c,stx,sty-1,st,searched,1,count+1)+blackcounter(r,c,stx,sty+1,st,searched,3,count);
}
}else{
return 0;
}
return -1;
}

}


Cは数列の中から幾つか要素を選んで、k倍したときにある要素と被らない要素の最大数を求めるという問題。問題自体は単純なのに、TLE解しかだせず。

  by ddrer-yossi | 2013-02-20 23:12 | codeforces | Comments(0)

スノボ旅行三日目(帰宅)、TopCoder SRM 571(Div.1昇格!)

朝7時に起床。
昨日はレクチャー中心だったおかげか、あまり筋肉痛にはなっていませんでした。
朝はがっつりバイキング形式。

f0019846_175504.jpg


朝はほぼ全員で初級~中級あたりを滑っていく。
お昼はカツ丼にしました。色合いがおかしいのはカメラが壊れつつある証拠です。

f0019846_175608.jpg


後半は頂上目指していく形で。

f0019846_17562963.jpg


夕方16時半に切り上げて、風呂入る、レンタル物返すなどして帰路へ。
途中のSAできなこ抹茶白玉餡蜜を食べました。
f0019846_17583147.jpg


夜はサイゼで少し雑談して解散。
f0019846_17585025.jpg


帰宅後はTopCoderへ。正直眠すぎているのでDiv1かかっているのに参加してよかったのか
疑問でしたが、頑張ることに。
なんと幸いな事にeasyもmediumも超絶簡単でした。

easy
丸の数をかぞえるだけ(えっ


public class FoxAndGame {

public int countStars(String[] result) {
int count = 0;
for(int i = 0 ; i < result.length ; i++){
for(int j = 0 ; j < result[i].length() ; j++){
if(result[i].charAt(j) == 'o')count++;
}
}
return count;
}
}


medium 文字列ソート機能を使って文字列のソートをして、
50件より多ければ最初の50件を出力するだけ。

import java.util.Arrays;

public class FoxAndMp3Easy {

public String[] playList(int n) {
String[] st = new String[n];
for(int i = 0 ; i < n ; i++){
st[i] = (i+1)+".mp3";
}
Arrays.sort(st);
if(st.length <= 50){
return st;
}else{
String[] newst = new String[50];
for(int i = 0 ; i < 50 ; i++){
newst[i] = st[i];
}
return newst;
}
}

}

easyが0:01:47.655
mediumが0:03:57.966
という超絶高速タイムで通過した。

しかしhardは残り時間で考えても全く歯が立たず。
結果は58位。部屋では1位ということで、初のDiv.1昇格!!となりました。
いやー長かったですね。しかしこれがスタートラインだということも忘れてはいけません。

  by ddrer-yossi | 2013-02-19 23:51 | 旅行 | Comments(0)

SEM SKIN - DESIGN by SEM EXE