Entries

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

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

コメント

コメントの投稿

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

トラックバック

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

ARC 009 B - おとぎの国の高橋君 (この記事を編集する[管理者用])

Source

AtCoder Regular Contest #009
問題文

問題概要

数字 (0~9) の大小関係が与えられる.ただし0は一番小さい.
その時に整数を昇順ソートする問題.
整数を比較するとき,その整数の左には無限に0が詰まってると思い,最も左の桁で最初に違う数字をみて比較する.

解法

大小関係に対応するように数字を置き換えてソートして元に戻す.

C++によるスパゲッティなソースコード
#include<cstdio>
#include<vector>
#include<set>
#include<map>
#include<queue>
#include<algorithm>
#include<string>
#include<utility>
#include<iostream>
using namespace std;

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

int main(){
  int i,j,k,l,m,n;
  int arr[10];
  int cnv[1000], rev[1000];
  string in[1000];

  rep(i,10) scanf("%d",arr+i);

  rep(i,10) rev['0'+i] = arr[i]+'0', cnv[arr[i]+'0'] = '0'+i;

  scanf("%d",&n);
  rep(i,n) cin >> in[i];

  rep(i,n) while(in[i].size() < 10) in[i] = '0' + in[i];

  rep(i,n) rep(j,in[i].size()) in[i][j] = cnv[in[i][j]];
  sort(in, in+n);
  rep(i,n) rep(j,in[i].size()) in[i][j] = rev[in[i][j]];

  rep(i,n) while(in[i][0]=='0') in[i] = in[i].substr(1);

  rep(i,n) cout << in[i] << endl;

  return 0;
}

コメント

コメントの投稿

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

トラックバック

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

Appendix

Recent Articles

ブログ内検索

Ads


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