ルビースパークとやらを買ってみた Codeforces#192

今日は先週逃したため、きっちり朝10時にマックへ行き、
1000円バーガーとやらを購入しに行った。
既に列ができていて、それなりに待ちました。

外装はこんな感じ
f0019846_1263343.jpg


f0019846_1264540.jpg

特製のサラミがかなりの枚数あります。5~6枚だったかな。

f0019846_1272547.jpg

感想ですが、一般的なマックのハンバーガーよりはずっと食べごたえがあり、
サラミのスパイスが効いていてピリッとした味わいでした。
でも1000円は高いかなー。常に600円で販売されてるなら買うかもという感じ。

その後はUSBメモリを買いに秋葉原へ。紛失したのが見つからないので。
f0019846_130597.jpg

現状維持 #とは

f0019846_1302665.jpg

マタヨシさんめっちゃ演説してた。

その後は秋葉LL2号店へ。
f0019846_131183.jpg

ストレイ・マーチ81.6%

しかしすぐに飽きて地元へ。

f0019846_1324736.jpg

ZZ SSフルコン。jubeat Lv10初フルコンです。

f0019846_1343677.jpg

Freezing atmosphere(H)フルコン。

f0019846_1351588.jpg

Beatchic仮面(H)フルコン

f0019846_1355893.jpg

未来のプリズム(H)フルコン

f0019846_1362350.jpg

GENOM SCREAMS(H)フルコン

f0019846_137141.jpg

ABSOLUTE(N)フルコン

f0019846_1373477.jpg

DEAD LOCK 80.5% AA

f0019846_1381584.jpg

HAERETICUS 74.8%

f0019846_1384944.jpg

ラクエン(H)フルコン

f0019846_1391543.jpg

The smile of you(A)フルコン

f0019846_1395194.jpg

ZZ 80.5% AA

f0019846_1402175.jpg

天庭 おとこのこ編 銅◆

夜はCodeforces#192に参加。

A問題は、単純に行と列を調べて、Sがなければ塗りつぶして、最後に計算させるという
愚直な方法でもok。

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();
input.nextLine();
String[] st = new String[r];
for(int i = 0 ; i < r ; i++){
st[i] = input.nextLine();
}
boolean[][] ce = new boolean[r][c];
for(int i = 0 ; i < r ; i++){
boolean isok = true;
for(int j = 0 ; j < c ; j++){
if(st[i].charAt(j) == 'S'){
isok = false;
break;
}
}
if(isok){
for(int j = 0 ; j < c ; j++){
ce[i][j] = true;
}
}
}

for(int i = 0 ; i < c ; i++){
boolean isok = true;
for(int j = 0 ; j < r ; j++){
if(st[j].charAt(i) == 'S'){
isok = false;
break;
}
}
if(isok){
for(int j = 0 ; j < r ; j++){
ce[j][i] = true;
}
}
}

int num = 0;
for(int i = 0 ; i < r ; i++){
for(int j = 0 ; j < c ; j++){
if(ce[i][j])num++;
}
}
System.out.println(num);
}
}


B問題は、繋いではいけない道がないノードが必ず1つあるので、
それを中心にスター型につなげば良い。


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();
int[] na = new int[m];
int[] nb = new int[m];
for(int i = 0 ; i < m ; i++){
na[i] = input.nextInt();
nb[i] = input.nextInt();
}
boolean[] isng = new boolean[n];
for(int i = 0 ; i < m ; i++){
isng[na[i]-1] = true;
isng[nb[i]-1] = true;
}
int tindex = -1;
for(int i = 0 ; i < n ; i++){
if(!isng[i]){
tindex = i+1;
break;
}
}
System.out.println(n-1);
for(int i = 0 ; i < n ; i++){
if((i+1) != tindex){
System.out.println((i+1)+" "+tindex);
}
}
}
}


C問題は、全マスを浄化したい。
魔法は唱えた場所の行と列を浄化できる。
しかしEの場所では魔法は唱えられない。
浄化できる場合は場所を答えよという問題。

列と行それぞれを調べて行って、全列でいけるか、全行でいけるか
それぞれ判定して、どっちかでうまくいけばそれを出力するようにした。


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();
input.nextLine();
String[] st = new String[n];
for(int i = 0 ; i < n ; i++){
st[i] = input.nextLine();
}
boolean failed = false;
ArrayList lst = new ArrayList();
for(int i = 0 ; i < n ; i++){
boolean isok = false;
for(int j = 0 ; j < n ; j++){
if(st[i].charAt(j) == '.'){
lst.add((i+1)+" "+(j+1));
isok = true;
break;
}
}
if(!isok){
failed = true;
break;
}
}

if(failed){
lst.clear();
boolean fail = false;
for(int i = 0 ; i < n ; i++){
boolean isok = false;
for(int j = 0 ; j < n ; j++){
if(st[j].charAt(i) == '.'){
lst.add((j+1)+" "+(i+1));
isok = true;
break;
}
}
if(!isok){
fail = true;
break;
}
}
if(fail){
System.out.println(-1);
}else{
for(int i = 0 ; i < lst.size(); i++){
System.out.println(lst.get(i));
}
}
}else{
for(int i = 0 ; i < lst.size(); i++){
System.out.println(lst.get(i));
}
}
}
}


D問題は、ミケモントレーナーの数が数字、自分のスタートがS、ゴールがEで
与えられて、Eを目指す時にミケモントレーナーと遭遇する最小値を求めよという問題。
各数値がEに向かうまでの距離を計算することになるが、
これを位置ごとにやるのではなく、マップ全体に対して先に計算してしまい、
座標を調べる際に、プレイヤーがEまで向かうときの距離 >= ミケモントレーナーがEに向かうときの距離
となっていれば、加算するという方針でok。
Eに向かうまでの距離は、BFSなり幅探索でやるのが王道かな。


import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
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();
input.nextLine();
String[] st = new String[r];
for(int i = 0 ; i < r ; i++){
st[i] = input.nextLine();
}
int[][] exits = new int[r][c];
int er = -1;
int ec = -1;
int sr = -1;
int sc = -1;
ArrayList enemy_r = new ArrayList();
ArrayList enemy_c = new ArrayList();
for(int i = 0 ; i < r ; i++){
for(int j = 0 ; j < c ; j++){
exits[i][j] = Integer.MAX_VALUE;
if(st[i].charAt(j) == 'E'){
er = i;
ec = j;
}else if(st[i].charAt(j) == 'S'){
sr = i;
sc = j;
}else if(st[i].charAt(j) != '0' && st[i].charAt(j) != 'T'){
enemy_r.add(i);
enemy_c.add(j);
}
}
}
exits[er][ec] = 0;
Queue q = new LinkedList();
q.add(er+","+ec);
while(!q.isEmpty()){
String[] str = q.poll().split(",");
int nr = Integer.parseInt(str[0]);
int nc = Integer.parseInt(str[1]);
if(nr+1 < r && st[nr+1].charAt(nc) != 'T' && exits[nr][nc]+1 < exits[nr+1][nc]){
exits[nr+1][nc] = exits[nr][nc]+1;
q.add((nr+1)+","+nc);
}

if(nr-1 >= 0 && st[nr-1].charAt(nc) != 'T' && exits[nr][nc]+1 < exits[nr-1][nc]){
exits[nr-1][nc] = exits[nr][nc]+1;
q.add((nr-1)+","+nc);
}

if(nc+1 < c && st[nr].charAt(nc+1) != 'T' && exits[nr][nc]+1 < exits[nr][nc+1]){
exits[nr][nc+1] = exits[nr][nc]+1;
q.add(nr+","+(nc+1));
}

if(nc-1 >= 0 && st[nr].charAt(nc-1) != 'T' && exits[nr][nc]+1 < exits[nr][nc-1]){
exits[nr][nc-1] = exits[nr][nc]+1;
q.add(nr+","+(nc-1));
}
}
/*for(int i = 0 ; i < r ; i++){
for(int j = 0 ; j < c ; j++){
if(exits[i][j] == Integer.MAX_VALUE){
System.out.print(-1+" ");
}else{
System.out.print(exits[i][j]+" ");
}
}
System.out.println();
}*/
int enemy_count = 0;
for(int i = 0 ; i < enemy_r.size(); i++){
if(exits[enemy_r.get(i)][enemy_c.get(i)] <= exits[sr][sc]){
enemy_count += Character.digit(st[enemy_r.get(i)].charAt(enemy_c.get(i)), 10);
}
}
System.out.println(enemy_count);
}
}


E問題は、各点に辺が2本与えられ、これを再構築する際に、
各点に与えられる辺は2本以下で、かつ前の辺の合計と等しく、
かつ、前に与えられた辺を含まないようなグラフが構築できるなら構築せよという問題。
正直わからなかった。

この回で初めて部屋内1位を取り、レートが248上がりました。バク上げです。

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

<< CodeVS 2.1観戦へ。 Evansクリア。SRM参加できず。 >>

SEM SKIN - DESIGN by SEM EXE