2011年12月24日土曜日

PCの自作に先立って昔買った無線LANアダプタをテスト

設定については完全にこのページを参考にしました。何が何だか分からない!

http://www37.atwiki.jp/linux_kai/pages/85.html

というわけで、問題なく動作したので、暫くはLANハブを購入する必要はなさそうです。
この冬やることが見つからない……

2011年12月19日月曜日

冬休みの宿題

冬休みにやること
1、蟻本を可能な限り進める。
2、哲学書的な書籍を1冊以上読む。
3、規則正しい生活を身につける。
4、ウェブアプリケーションとデータベースを学ぶ。

多分こんなもん。何かあったら追記しよう。

2011年12月17日土曜日

練習問題の5問目

こんなん
#include<stdio.h>
#include<stdlib.h>
void input();
void output();
char fname[] = {"2012-pr-t5-in1.txt"};
char oname[] = {"1.txt"};
long n,ans;

int main(void){
  int i;
  long j;
  for(i = 0; i < 5; i++){
    ans = 3;
    input();
    for(j = 1; j < n; j++){
      ans = ans * 3;
      if(ans >= 100000){
    ans = ans % 100000;
      }
    }
    output();
    fname[13]++;
    oname[0]++;
  }
}

void input(){
  FILE *fp;
  char inbuf[32];
  if((fp = fopen(fname,"r")) == NULL){
    printf("error\n");
    exit(1);
  }
  fgets(inbuf,32,fp);
  sscanf(inbuf,"%ld",&n);
  fclose(fp);
}

void output(){
  FILE *fp;
  fp = fopen(oname,"w");
  fprintf(fp,"%ld",ans);
  fclose(fp);
}

もっとスマートに書きたい。
コメント文もつけたい。

AP 合格者の手記

午前得点
66.25点
午後得点
70.00点 
というわけで、そこそこの点数で合格。
実は選択が

問1
経営戦略
問3
情報戦略
問7
組込みシステム開発
問9
情報セキュリティ
問11
ITサービスマネジメント
問12
システム監査
こんな感じだったりする。最初から経営戦略選んでる。プログラム分からないし。

とりあえず合格できたから良かった。来年はデスペあたり挑みます。

2011年12月9日金曜日

クラスって何

今日学校でJavaをならったので、クラスを使ってみました。
C++で。

#include<iostream>
#include<queue>
#include<iomanip>
class Ctest{
    private:
    int i[10];
    public:
    void seti(int x, int n);
    int geti(int x);
    void reseti();
   
};

void Ctest::reseti(){
    int j;
    for(j = 0; j < 10; j++){
        i[j] = 0;
    }
}

int Ctest::geti(int x){
    if(x > 9){
        return 0;
    }
    return i[x];
}

void Ctest::seti(int x, int n){
    i[n] = x;
}

int main(){
    Ctest test;
    std::queue<int> que;
    int buf,n = 0;
    test.reseti();
    std::cin >> buf;
    while(buf != 0){
        que.push(buf);
        std::cin >> std::dec >> buf;
       
    }
    while(que.size() != 0 && n < 10){
        test.seti(que.front(), n);
        que.pop();
        n++;
    }
    n = 0;
    while((buf = test.geti(n)) != 0 && n < 10){
        std::cout << buf << std::endl;
        n++;
    }
}

なぜこんなものを作ったのかは分からない。

2011年12月3日土曜日

JOI 予選 過去問 第8回 問題4

こんな感じになった。

void solve(int x,int y,int depth){
  a[y][x] = 0;
  if(a[y + 1][x] == 1){
    solve(x,y + 1,depth + 1);
  }
  if(a[y - 1][x] == 1){
    solve(x,y - 1,depth + 1);
  }
  if(a[y][x + 1] == 1){
    solve(x + 1,y,depth + 1);
  }
  if(a[y][x - 1] == 1){
    solve(x - 1,y,depth + 1);
  }
  a[y][x] = 1;

  if(a[y + 1][x] + a[y - 1][x] + a[y][x - 1] + a[y][x - 1] == 0){
    if(depth >= maxdepth){
      maxdepth = depth + 1;
    }
  }
}




これでmain関数からx,yをそれぞれN,Mまで変えてsolve関数を呼び出します。
ってかコメント文まったくつけてないな……

BFS 幅優先探索

幅優先探索を使ってスタートからゴールまでの道のりを計算するらしい。

#include<stdio.h>
#include<queue>
typedef std::pair<int ,int> P;
int bfs();
const int INF = 500;

char maze[10][11] = {"#S######.#","......#..#",".#.##.##.#",".#........","##.##.####","....#....#",".#######.#","....#.....",
".####.###.","....#...G#"};
int N = 10,M = 10;
int sx = 1,sy = 0;
int gx = 8,gy = 9;

int d[10][10];

int dy[4] = {1,0,-1,0} , dx[4] = { 0,1,0,-1,};

int bfs(){
    int i,j;
    int nx,ny;

    std::queue<P> que;
    for(i = 0;i < 10;i++){
        for(j = 0;j < 10;j++){
            d[i][j] = INF;
        }
    }
    que.push(P(sy,sx));
    d[sy][sx] = 0;
   
    while(que.size()){
        P p = que.front();
        que.pop();
        if(p.first == gy && p.second == gx){
            break;
        }
        for(i = 0;i < 4;i++){
            ny = p.first + dy[i];
            nx = p.second + dx[i];
           
            if(0 <= ny && ny < N && 0 <= nx && nx < M && maze[ny][nx] != '#' && d[ny][nx] == INF){
                que.push(P(ny,nx));
                d[ny][nx] = d[p.first][p.second] + 1;
            }
        }
    }
    return d[gy][gx];
}

int main(void){
    int ans;
    ans = bfs();
    printf("%d\n",ans);
    for(int i = 0; i < 10; i++){
        printf("%s\n",maze[i]);
    }
    return 0;
}

2011年12月1日木曜日

できた件について

計算結果をメモする配列をlong long int型にしたら出来ました。
そりゃこれだけ大きい値が収まるわけないよね。

//入力
long long int dp[N][21];
int a[N];

//回答
void solve(){
    int i,j;
    dp[0][a[0]] = 1;
    for (i = 0; i <= n-2; i++){
        for(j = 0; j <= 20; j++){
            if(j - a[i] >= 0){
                dp[i][j] += dp[i - 1][j - a[i]];
            }
            if(j + a[i] <= 20){
                dp[i][j] += dp[i - 1][j + a[i]];
            }
        }
    }
    printf("%llu\n",dp[n - 2][a[n - 1]]);
}

とりあえずメモ化再帰からループに。メモ化再帰の方でも多分問題なく解けると思うけど。
本番でこういう単純なことに気づかなかったら怖いな…

2011年11月30日水曜日

パソコン欲しい

自分用のパソコンが欲しい。未だに共用のノートPCしかないので。
やっぱりMacBook Airが欲しい。13インチ。

誰か買って……

Emacsをインストールしたことを一応書いておく事に

Linuxのエディタとして有名らしいので、コーディングの練習にバリエーションを持たせる意味でインストールしてみました。

参考:http://www.randynetwork.com/blog/265  http://blog.mizoshiri.com/archives/988

yumのGUI使ってサッと検索してインストールすればいいはずだが、端末使いたい思いもあるので敢えてそっちで。

参考のサイトでyumだとバージョンが21とかになるらしいので(試して無いけど)、わざわざソースコードからインストール。

# wget http://ftp.gnu.org/pub/gnu/emacs/emacs-23.3b.tar.gz
# tar zxvf emacs-23.3b.tar.gz
# cd ./emacs-23.3
# ./configure --without-x
# make
# make install

とまでやって、起動してみると"Cannot open termcap database file"だの言われたので、そのままググってみると、"libncurses5-dev"なんてのをインストールしないといけないらしいので、

# yum install libncurses5-dev

の後に再度インストールしたら起動しました、と。

正直こんなこと書いて誰かの役に立つとは微塵も思わない。

2011年11月29日火曜日

JOI予選、去年の問題

なぜか入力3が出来るのに入力4,5が出来ない。あと例題2も出来ない。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
bool datascan();
int solve(int,int);
int a[512],amax;
long int memo[513][21];
long int ans = 0;


int main(void){
    int i,j;
    for(i = 0; i < 513; i++){
        for(j = 0; j < 21; j++){
            memo[i][j] = 0;
        }
    }
  
    if(datascan()){
        exit(EXIT_FAILURE);
    }
    solve(1,a[0]);
  
    printf("%d\n",ans);
    return 0;
  
}

int solve(int i,int sum){
    long int ret = 0;
    long int patn;
    if(i == amax - 1){
        if(a[amax - 1] == sum){
            ans++;
            return 1;
        }else{
            return 0;
        }
    }else if(memo[i][sum] != 0){
        ans = ans + memo[i][sum];
        return memo[i][sum];
    }else{
        if(sum + a[i] <= 20){
            patn = solve(i + 1,sum + a[i]);
            if(patn != 0){
                memo[i][sum] += patn;
                ret += patn;
            }
        }
        if(sum - a[i] >= 0){
            patn = solve(i + 1,sum - a[i]);
            if(patn != 0){
                memo[i][sum] += patn;
                ret += patn;
            }
        }
    }
    return (ret);
}

bool datascan(void){
    int i = 0;
    char fbuf[513],*p;
    FILE *fp;
    if((fp = fopen("2011-yo-t4-in5.txt","r")) == NULL){
        printf("file open error\n");
        return true;
    }
  
    fgets(fbuf,100,fp);
    sscanf(fbuf,"%d",&amax);
    fgets(fbuf,512,fp);
    printf("%s\n",fbuf);
    p = fbuf;
    do{
        sscanf(p,"%d",&a[i]);
        i++;
        p++;
    }while((p = strchr(p,' ')) != NULL);
  
  
  
    for(i = 0; i < amax; i++){
        printf("%d ",a[i]);
    }
    printf("\n");
  
    fclose(fp);
    return false;
}

一体何がダメなのか…
まぁ一応ここで12点取れてれば大丈夫な気はするけど。

2011年11月27日日曜日

入力が出来るようになった

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(void){
    int a[512],i = 0,n;
    char fbuf[256],*p;
    FILE *fp;
   
    if((fp = fopen("data","r")) == NULL){        //ファイルのオープン
        printf("file open error\n");
        exit(EXIT_FAILURE);
    }
   
    
   
    fgets(fbuf,100,fp);                                //ファイルから1行読み取ってfbufへ
   
    printf("%s\n",fbuf);                            //fbufの内容を出力

    p = fbuf;                                        //ポインタpにfbufのアドレスを代入
   
   
    //数字の読み込み
    do{
        sscanf(p,"%d",&a[i]);                        //ポインタpで指定された文字列から整数を取得
        i++;
        p++;                                        //ポインタを1つ増やす
    }while((p = strchr(p,' ')) != NULL);            //ポインタpで指定された文字列からスペースを探し、見つかればループを継続
 
  a[i] = -1;                                    //配列の最後を-1に設定

  i = 0;   
   
    //配列の出力
    while(a[i] >= 0){                            //a[i] >= 0ならa[i]を出力
        printf("%d ",a[i]);
        i++;
    }
    printf("\n");
   
    fclose(fp);                                        //ファイルのクローズ

    return 0;
}

もう情報オリンピックまで1ヶ月切ったというのに今更ファイルの入力が出来るようになった…
コメント文をこんなに書くのは初めてだからどうすればいいやら。

もっといいやり方があると思うけどな!

2011年11月1日火曜日

test

毎度お決まりの新しいブログ立ち上げる時のテストってやつで