atwiki-logo
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • このページの操作履歴
    • このウィキのページ操作履歴
  • ページ一覧
    • ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このウィキの更新情報RSS
    • このウィキ新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡(不具合、障害など)
ページ検索 メニュー
ymatsu @Wiki
  • 広告なしオファー
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
広告非表示(β版)
ページ一覧
ymatsu @Wiki
  • 広告なしオファー
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
ymatsu @Wiki
広告非表示 広告非表示(β)版 ページ検索 ページ検索 メニュー メニュー
  • 新規作成
  • 編集する
  • 登録/ログイン
  • 管理メニュー
管理メニュー
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • このページの操作履歴
    • このウィキのページ操作履歴
  • ページ一覧
    • このウィキの全ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ一覧(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このwikiの更新情報RSS
    • このwikiの新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡する(不具合、障害など)
  • atwiki
  • ymatsu @Wiki
  • 1128 Frame Stacking

ymatsu @Wiki

1128 Frame Stacking

最終更新:2006年04月16日 21:20

匿名ユーザー

- view
だれでも歓迎! 編集
!!1128 Frame Stacking
!!問題
http://acm.pku.edu.cn/JudgeOnline/problem?id=1128
!!解答例
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            int h = sc.nextInt();
            int w = sc.nextInt();
            char[][] table = new char[h][w];
            for(int i=0;i<h;i++) table[i] = sc.next().toCharArray();
            Solver sol = new Solver(h,w,table);
            sol.printSolution();
        }
    }
}

class Solver{
    int h;
    int w;
    char[][] table;
    int letternum;
    char[] letterset;
    HashMap<Character,Integer> dict;
    boolean[][] less;
    Solver(int h, int w, char[][] table) {
        this.h = h;
        this.w = w;
        this.table = table;
        makeLetterSet();
    }
    public void printSolution(){
        makeLessTable();
        char[] output = new char[letternum];
        boolean[] used = new boolean[letternum];
        Arrays.fill(used,false);
        printSolution(0,output,used);
    }
    private void printSolution(int k,char[] output,boolean[] used){
        if(k==letternum) System.out.println(output);
        for(int i=0;i<letternum;i++){
            if(used[i]) continue;
            output[k] = letterset[i];
            
            boolean cont = false;
            int l = dict.get(output[k]);
            for(int j=0;j<k;j++){
                int m = dict.get(output[j]);
                if(less[l][m]){
                    cont = true;
                    break;
                }
            }
            if(cont) continue;
            
            used[i] = true;
            printSolution(k+1,output,used);
            used[i] = false;
        }
    }
    private void makeLessTable(){
        less = new boolean[letternum][letternum];
        for(int i=0;i<letternum;i++) Arrays.fill(less[i],false);
        
        for(int k=0;k<letternum;k++){
            char c = letterset[k];
            int hmin = h;
            int hmax = -1;
            int wmin = w;
            int wmax = -1;
            for(int i=0;i<h;i++){
                for(int j=0;j<w;j++){
                    if(table[i][j]==c){
                        if(i<hmin) hmin = i;
                        if(i>hmax) hmax = i;
                        if(j<wmin) wmin = j;
                        if(j>wmax) wmax = j;
                    }
                }
            }
            
            for(int i=hmin;i<=hmax;i++){
                if(table[i][wmin]!=c){
                    char d = table[i][wmin];
                    int l = dict.get(d);
                    less[k][l] = true;
                }
                if(table[i][wmax]!=c){
                    char d = table[i][wmax];
                    int l = dict.get(d);
                    less[k][l] = true;
                }
            }
            
            for(int j=wmin;j<=wmax;j++){
                if(table[hmin][j]!=c){
                    char d = table[hmin][j];
                    int l = dict.get(d);
                    less[k][l] = true;
                }
                if(table[hmax][j]!=c){
                    char d = table[hmax][j];
                    int l = dict.get(d);
                    less[k][l] = true;
                }
            }
        }
    }
    private void makeLetterSet(){
        boolean[] find = new boolean[26];
        Arrays.fill(find,false);
        
        for(int i=0;i<h;i++){
            for(int j=0;j<w;j++){
                if(table[i][j]=='.') continue;
                int c = table[i][j] - 'A';
                if(!find[c]) find[c] = true;
            }
        }
        
        int cnt = 0;
        for(int i=0;i<26;i++){
            if(find[i]) cnt++;
        }
        letternum = cnt;
        letterset = new char[letternum];
        
        dict = new HashMap<Character,Integer>();
        cnt = 0;
        for(int i=0;i<26;i++){
            if(find[i]){
                letterset[cnt] = (char)('A'+i);
                dict.put(letterset[cnt],cnt);
                cnt++;
            }
        }
    }
}

タグ:

+ タグ編集
  • タグ:
タグの更新に失敗しました
エラーが発生しました。ページを更新してください。
ページを更新
「1128 Frame Stacking」をウィキ内検索
LINE
シェア
Tweet
ymatsu @Wiki
記事メニュー
メニュー
  • トップページ
  • メニュー
  • 全掲載問題リスト
記事メニュー2

更新履歴

取得中です。
最近更新されたページ
  • 7149日前

    1407 e-market
  • 7149日前

    1406 A Starship Hakodate-maru
  • 7149日前

    1131 Octal Fractions
  • 7149日前

    1130 Alien Security
  • 7149日前

    1129 Channel Allocation
  • 7149日前

    1125 Stockbroker Grapevine
  • 7149日前

    1049 Microprocessor Simulation
  • 7149日前

    全掲載問題リスト
  • 7149日前

    メニュー
  • 7149日前

    トップページ
もっと見る
最近更新されたページ
  • 7149日前

    1407 e-market
  • 7149日前

    1406 A Starship Hakodate-maru
  • 7149日前

    1131 Octal Fractions
  • 7149日前

    1130 Alien Security
  • 7149日前

    1129 Channel Allocation
  • 7149日前

    1125 Stockbroker Grapevine
  • 7149日前

    1049 Microprocessor Simulation
  • 7149日前

    全掲載問題リスト
  • 7149日前

    メニュー
  • 7149日前

    トップページ
もっと見る
ウィキ募集バナー
急上昇Wikiランキング

急上昇中のWikiランキングです。今注目を集めている話題をチェックしてみよう!

  1. 遊戯王DSNTナイトメアトラバドール攻略Wiki@わかな
  2. デジタルモンスター まとめ@ ウィキ
  3. Last Z: Survival Shooter @ ウィキ
  4. GUNDAM WAR Wiki
  5. ホワイトハッカー研究所
  6. オバマス検証@wiki
  7. アニヲタWiki(仮)
  8. とある魔術の禁書目録 Index
  9. MADTOWNGTAまとめwiki
  10. beatmania IIDX SP攻略 @ wiki
もっと見る
人気Wikiランキング

atwikiでよく見られているWikiのランキングです。新しい情報を発見してみよう!

  1. アニヲタWiki(仮)
  2. ゲームカタログ@Wiki ~名作からクソゲーまで~
  3. MADTOWNGTAまとめwiki
  4. 初音ミク Wiki
  5. ストグラ まとめ @ウィキ
  6. 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  7. Grand Theft Auto V(グランドセフトオート5)GTA5 & GTAオンライン 情報・攻略wiki
  8. 検索してはいけない言葉 @ ウィキ
  9. 機動戦士ガンダム バトルオペレーション2攻略Wiki 3rd Season
  10. 英傑大戦wiki
もっと見る
新規Wikiランキング

最近作成されたWikiのアクセスランキングです。見るだけでなく加筆してみよう!

  1. MADTOWNGTAまとめwiki
  2. フォートナイト攻略Wiki
  3. MadTown GTA (Beta) まとめウィキ
  4. 首都圏駅メロwiki
  5. Last Z: Survival Shooter @ ウィキ
  6. まどドラ攻略wiki
  7. 駅のスピーカーwiki
  8. 魔法少女ノ魔女裁判 攻略・考察Wiki
  9. 漢字でGO 問題集 @wiki
  10. ちいぽけ攻略
もっと見る
全体ページランキング

最近アクセスの多かったページランキングです。話題のページを見に行こう!

  1. 【移転】Miss AV 見れない Missav.wsが見れない?!MissAV新URLはどこ?閉鎖・終了してない?missav.ai元気玉って何? - ホワイトハッカー研究所
  2. ブラック・マジシャン・ガール - アニヲタWiki(仮)
  3. ブラック・マジシャン・ガール - 遊戯王DSNTナイトメアトラバドール攻略Wiki@わかな
  4. 真崎杏子 - 遊戯王DSNTナイトメアトラバドール攻略Wiki@わかな
  5. 魔獣トゲイラ - バトルロイヤルR+α ファンフィクション(二次創作など)総合wiki
  6. ゴジュウユニコーン/一河角乃 - アニヲタWiki(仮)
  7. 参加者一覧 - MADTOWNGTAまとめwiki
  8. 参加者一覧 - ストグラ まとめ @ウィキ
  9. Pokémon LEGENDS Z-A - アニヲタWiki(仮)
  10. 小松勇輝 - 作画@wiki
もっと見る

  • このWikiのTOPへ
  • 全ページ一覧
  • アットウィキTOP
  • 利用規約
  • プライバシーポリシー

2019 AtWiki, Inc.