2015年の目標

2014年も残り僅かとなってきたので2015年の目標を

勉強
高専の数学を終わらせる
マクマリー有機化学を読み終える
Forest読み終える

競技
PCK2015の本選に出場して入賞する
AOJ solved数 500

資格
SC/NWを取得
数検1級
TOEIC700
英検2級

というわけで頑張ろうとおもいます
2015年もよろしくお願いします

C++の勉強を始める

やはりできる言語がJavaだけとかいうのは問題なので
C++の勉強を始めようかと思う

というわけでJavaの入門の時もお世話になった柴田望洋先生の本
明解C++入門編を購入しました

冬休み中に全部読めるように頑張ろう(無理)

応用情報技術者試験受験記

一か月前 「申し込んだの忘れてた 本通読しよう」
一週間前 「結局本全然読んでない 過去問しよ」
     「お、ぼちぼちな点数じゃんもう余裕やろ」
当日   「勉強してない落ちたわ」
午前   「まぁこれはできるよな」
午後   「日本語がわからん」

合格発表当日「こわいこわいこわい」
結果
午前得点 91.25点
午後得点 86.00点

過去問で取れてた組み込みとかが難しかったのでつらかったけど
アルゴリズムがとても簡単だったので合格できました。
次は情報セキュリティスペシャリストを目指す

AOJ 0202 At Boss's Expenseを解く

dpやな
dpはできんな
でもこれ簡単なdpじゃね

あっ
→WA
なんでや!完璧やろ!
あっ 1も含むのね 頭バグってた

→AC

import java.util.*;
public class Main {
  public static int[] val;
  public static int n;
  public static int x;
  public static boolean[] dp;
  public static int[] PrimeTable;
  public static void main(String[] args) {
    Scanner stdIn = new Scanner(System.in);
    
    while (true) {
      
      n = stdIn.nextInt();
      x = stdIn.nextInt();
      
      if(n == 0 && x == 0) {
        break;
      }
      
      val = new int[n];
      for (int i = 0; i < n; i++) {
        val[i] = stdIn.nextInt();
      }
      dp = new boolean[x + 1];
      PrimeTable = new int[x + 1];
      dp();
      createPrimeTable(x);
      Arrays.sort(PrimeTable);
      int ans = 0;
      for (int i = x ; i >= 1; i--) {
        if (dp[i] && Arrays.binarySearch(PrimeTable, i) >= 0) {
          ans = i;
          break;
        }
      }
      if (ans != 0) {
        System.out.println(ans);
      } else {
        System.out.println("NA");
      }
    }
  }
  
  public static void dp() {
    dp[0] = true;
    for(int i = 0; i < n; i++) {
      for(int j = 0; j <= x; j++) {
        if(dp[j] == true) {
          
          if(j + val[i] <= x) {
            dp[j + val[i]] = true;
          }
        }
      }
    }
  }
  
  public static void createPrimeTable(int x) {
    //xまでの素数テーブルを作成
    boolean[] isPrime = new boolean[x+1];
    for(int i = 2; i < x+1; i++) {
      isPrime[i] = true;
    }
    int counter = 0;
    for(int i = 2; i < Math.sqrt(x+1); i++) {
      if(isPrime[i]) {
        for(int j = i * 2; j < x+1; j += i) {
          isPrime[j] = false;
        }
      }
    }
    for(int i = 0; i < x+1; i++) {
      if(isPrime[i]) {
        PrimeTable[counter++] = i;
      }
    }
    
  }
  
}

AOJ 0201 Wrought Gold Masterを解く

Wrought Gold Master | Aizu Online Judge

はいはいDFSDFS ご注文はDFSですか〜wwwwww

→RE

は?なんでとおらねえのこれ

returnの値0にしとこwwwwたぶんそこらへんだwwwww

→AC

通ったwwwwwwwww

import java.util.*;
public class Main {
  public static int[][] typeitem;
  public static int[] itemval;
  public static int[] val;
  public static void main(String[] args) {
    Scanner stdIn = new Scanner(System.in);
    while (true) {
      int n = stdIn.nextInt();
      if(n == 0) {
        break;
      }
      String[] AT = new String[n]; //アイテム名とIDの対応の格納
      val = new int[n]; //各IDの価格
      typeitem = new int[n][0];
      for(int i = 0; i < n; i++) {
        String tmp22 = stdIn.next();
        AT[i] = tmp22;
        val[search(AT,tmp22)] = stdIn.nextInt(); 
      }
      
      int suma = stdIn.nextInt();
      
      for(int i = 0; i < suma; i++) {
        int idx0 = search(AT,stdIn.next());
        int nums = stdIn.nextInt();
        typeitem[idx0] = new int[nums];
        for(int j = 0; j < nums; j++) {
          typeitem[idx0][j] = search(AT,stdIn.next());
        }
      }
      int seaID = search(AT,stdIn.next());
      
      int ans = dfs(seaID);
      
      System.out.println(ans);
    }
    
    
    
    
  }
  
  public static int search(String[] id, String tmp) {
    for(int i = 0; i < id.length; i++) {
      if(id[i].equals(tmp)) {
        return i;
      }
    }
    return 0; //-1だと何故か通らない よくわからない。
  }
  
  public static int dfs(int id) {
    int ALc = 0;
    if(typeitem[id].length == 0) {
      return val[id]; 
    }
    for(int i = 0; i < typeitem[id].length; i++) {
      ALc += dfs(typeitem[id][i]);
    }
    
    if(val[id] > ALc) {
      return ALc;
    }
    return val[id];
  }
}

AOJ 0200 Traveling Alone: One-way Ticket of Youthを解く

Traveling Alone: One-way Ticket of Youth | Aizu Online Judge


はいはいワーシャルフロイドワーシャルフロイド(覚えたばっかりのアルゴリズムを言いたくなる症候群)

→WA

は?

あ ループがなんかおかしい

→AC


んんwwwwwww

経由地 出発地 目的地 の順のループですな

import java.util.*;
public class Main {
  public static void main(String[] args) {
    Scanner stdIn = new Scanner(System.in);
    while(true) {
      int n = stdIn.nextInt();
      int m = stdIn.nextInt();
      
      if(n == 0 && m == 0) {
        break;
      }
    
      int[][] cost = new int[m+1][m+1];
      int[][] time = new int[m+1][m+1];
    
      for(int i = 0; i < m+1; i++) {
        for(int j = 0; j < m+1; j++) {
          cost[i][j] = 1000000000;
          time[i][j] = 1000000000;
          if(i == j) {
            cost[i][j] = 0;
            time[i][j] = 0;
          }
        }
      }
    
      for(int i = 0; i < n; i++) {
        int a = stdIn.nextInt();
        int b = stdIn.nextInt();
        int costA = stdIn.nextInt();
        int timeA = stdIn.nextInt();
      
        cost[a][b] = costA;
        cost[b][a] = costA;
      
        time[a][b] = timeA;
        time[b][a] = timeA;
      }
    
      for(int k = 0; k < m+1; k++) {
        for(int i = 0; i < m+1; i++) {
          for(int j = 0; j < m+1; j++) {
            cost[i][j] = Math.min(cost[i][j], cost[i][k]+cost[k][j]);
            time[i][j] = Math.min(time[i][j], time[i][k] + time[k][j]);
          }
        }
      }
    
      int k = stdIn.nextInt();
    
      for(int i = 0; i < k; i++) {
        int p = stdIn.nextInt();
        int q = stdIn.nextInt();
        int r = stdIn.nextInt();
      
        if(r == 0) {
          System.out.println(cost[p][q]);
        }
        else {
          System.out.println(time[p][q]);
        }
      
      }
    
    }
    
  }
}