Entries

スポンサーサイト (この記事を編集する[管理者用])

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

コメント

コメントの投稿

コメントの投稿
管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://rsujskf.blog32.fc2.com/tb.php/1965-6892b998
この記事にトラックバックする(FC2ブログユーザー)

April 2011 Cook-Off 3問目 - Internet Media Types (この記事を編集する[管理者用])

Source

codechef April 2011 Cook-Off 3問目
Problem Statement
codechef April 2011 Cook-Offの参加記録

問題概要

拡張子とメディアタイプの対応関係 (100個以下) が与えられる.
ファイル名からメディアタイプを求める問題.
拡張子とは,ファイル名の最後の「.」より後ろの部分で,「.」が含まれていない場合は拡張子なし.

解法

文字列系実装問題.やるだけ.

C言語のスパゲッティなコード
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define REP(i,a,b) for(i=a;i<b;i++)
#define rep(i,n) REP(i,0,n)

int is_same(char a[],char b[],int len){
  int i;
  rep(i,len) if(a[i]!=b[i]) return 0;
  return 1;
}

int main(){
  int i,j,k,l,m,n,q;
  char ext[120][120], out[120][120];
  char in[120];
  char *fail = "unknown";
  int len[120];

  while(scanf("%d%d",&n,&q)==2){
    rep(i,n){
      scanf("%s%s",ext[i],out[i]);
      for(j=0;;j++) if(ext[i][j]<' ') break;
      len[i] = j;
    }

    while(q--){
      scanf("%s",in);
      for(i=0;;i++) if(in[i]<' ') break;
      k = i;

      for(i=k-1;i>=0;i--) if(in[i]=='.') break;
      if(i<0){puts(fail); continue;}

      i++;
      rep(j,n){
        if(len[j]==k-i && is_same(ext[j],in+i,len[j])){
          puts(out[j]);
          break;
        }
      }

      if(j==n) puts(fail);
    }
  }

  return 0;
}

コメント

コメントの投稿

コメントの投稿
管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://rsujskf.blog32.fc2.com/tb.php/1965-6892b998
この記事にトラックバックする(FC2ブログユーザー)

Appendix

Recent Articles

ブログ内検索

Ads


(プライバシーポリシー)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。