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]]);
}

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