Entries

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

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

コメント

コメントの投稿

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

トラックバック

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

SRM247 DIV2 HARD - Speller (この記事を編集する[管理者用])

Source

TopCoder SRM247 DIV2 HARD (1000pt)
Problem Statement

問題概要

2つの文字列間の距離を,
 長さが違うと無限大
 長さが同じだと,違う文字の数
で定義する.
与えられた文字列のうち,1~99までの数字で一番近いものを返す問題.
複数あるなら-1を返す.
数字をどうやってアルファベット表記するかは問題文で定義されている.

解法

やるだけ.

C++によるスパゲッティなソースコード
// #includeとusing namespace std;は略

#define REP(i,a,b) for(i=a;i<b;i++)
#define rep(i,n) REP(i,0,n)

#define INF 1000000

class Speller {
public:
int value(string in) {
  int i,j,k;
  int res=-1, mx=INF, tmp;
  string num[100];

  REP(i,1,100){
    num[i]="";
    if(i==10){ num[i]="ten"; continue; }
    if(i==11){ num[i]="eleven"; continue; }
    if(i==12){ num[i]="twelve"; continue; }
    if(i==13){ num[i]="thirteen"; continue; }
    if(i==14){ num[i]="fourteen"; continue; }
    if(i==15){ num[i]="fifteen"; continue; }
    if(i==16){ num[i]="sixteen"; continue; }
    if(i==17){ num[i]="seventeen"; continue; }
    if(i==18){ num[i]="eighteen"; continue; }
    if(i==19){ num[i]="nineteen"; continue; }

    if(i/10==2) num[i]="twenty";
    if(i/10==3) num[i]="thirty";
    if(i/10==4) num[i]="forty";
    if(i/10==5) num[i]="fifty";
    if(i/10==6) num[i]="sixty";
    if(i/10==7) num[i]="seventy";
    if(i/10==8) num[i]="eighty";
    if(i/10==9) num[i]="ninety";

    if(i%10 && num[i].size()) num[i]+="-";

    if(i%10==1) num[i] += "one";
    if(i%10==2) num[i] += "two";
    if(i%10==3) num[i] += "three";
    if(i%10==4) num[i] += "four";
    if(i%10==5) num[i] += "five";
    if(i%10==6) num[i] += "six";
    if(i%10==7) num[i] += "seven";
    if(i%10==8) num[i] += "eight";
    if(i%10==9) num[i] += "nine";
  }

  rep(i,100){
    if(in.size() != num[i].size()) continue;
    tmp=0;
    rep(k,in.size()) if(num[i][k]!=in[k]) tmp++;
    if(tmp==mx){res=-1; continue;}
    if(tmp<mx) mx=tmp, res=i;
  }

  return res;
}

};

コメント

コメントの投稿

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

トラックバック

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

Appendix

Recent Articles

ブログ内検索

Ads


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