Hduの1本の水題の順序付け(hdu 1.3.6)

9430 ワード

ソート(hdu 1.3.6)
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 5799 Accepted Submission(s): 1664 Problem Descriptionに1行の数字を入力し、この数字の「5」をすべてスペースと見なすと、1行がスペースで分割されたいくつかの非負の整数(一部の整数は「0」で始まり、これらの頭部の「0」は無視されるべきで、この整数がいくつかの「0」で構成されていない限り、この整数は0である)が得られます.
あなたの任務は、これらの分割で得られた整数を、小さい順にソートして出力することです.
Input入力には複数のテスト例が含まれており、各入力データは1行の数字(数字の間にスペースがない)しかなく、この数字の長さは1000以下である.
入力データ保証:分割された非負の整数は1000000を超えない.入力データがすべて「5」で構成されるはずがない.
Outputは、各試験例について、分割された整数ソートの結果を出力し、隣接する2つの整数の間を1つのスペースで分割し、各グループの出力が1行を占める.
Sample Input 0051231232050775
Sample Output 0 77 12312320
これは杭電の基礎的な水題で、実は比較的に簡単に見て、5を区切り記号として文字列を区分して、取得したInteger整数を並べ替えて出力して、考慮する情況は以下のいくつかにほかならない
1、冒頭は5、末尾は5 2、冒頭は5、末尾は5 3ではなく、冒頭は5ではなく、末尾は5 4、冒頭は5ではなく、末尾も5ではなく実は簡単な操作で、私が考えたのはc言語の操作で実現した(javaを使っていたが、javaのSTLを使うのをあきらめて、c言語でこの問題を考えたい)、すぐに次のコードを書きました
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

/**
 *
 * @author chaplinJ
 *
 */
public class Main5{


    public static void main(String[] args){

        Scanner sc = new Scanner(System.in);
        String st;
        char[] chars;
        int[] location;
        List list;;
        int count = 0;
        String values;
        while(sc.hasNext()){
            st = sc.next();
            chars = st.toCharArray();
            location = new int[chars.length+1]; //      
            count=0;
            list = new ArrayList();
            //     
            for(int i = 0 ; i < chars.length+1;i++){
                location[i] = -1;
            }
            for(int i = 0 ; i < chars.length;i++){

                if(chars[i] == '5'){
                    location[count++] = i; //    
                }

            }
            if(location[0] != -1){ //      5    
                if(chars[0] != 5){//  5          
                    values = String.valueOf(chars, 0, (location[0]));
                    if(!"".equals(values)){
                        list.add(Integer.parseInt(values));
                    }
                }
                for(int i = 0 ; i < location.length - 1 && location[i] != -1;i++){

                    if( location[i] + 1 <= location[i+1] - 1){ //  5   
                        values = String.valueOf(chars, location[i] + 1, (location[i+1] - location[i] - 1));
//                      System.out.print((location[i] + 1) + " " + (location[i+1] - 1));
                        if(!"".equals(values)){
                            list.add(Integer.parseInt(values));
                        }
                    }
                }
                if(location[count - 1] != chars.length -1){ //  5           
                    values = String.valueOf(chars, location[count - 1] + 1, chars.length - location[count - 1] - 1);
//                  System.out.print((location[i] + 1) + " " + (location[i+1] - 1));
                    if(!"".equals(values)){
                        list.add(Integer.parseInt(values));
                    }
                }
            }
            Collections.sort(list);
//          for(int i = 0 ; i < list.size();i++){
//              System.out.print(list.get(i)+" ");
//          }
            for(int i=0;iint a = list.get(i);
                System.out.print(a);  
                if(i!=list.size()-1)  
                    System.out.print(" ");  
                else  
                    System.out.println();  
            }  
        }

    }

}

楽しい感じで、hdu OJが提出して、結局WAが現れて、間違いなくWAです!!!本当に不思議ですね.私は過去を変えて、依然としてWAです!、自分が思いついたことを自分のパソコンでACできるようになったのですが、hdu OJはいつもWAで、このまま1午後、少なくとも6回提出しました!!!WAは相変わらず、、、、私を支えて他のOJプラットフォームに着いても、通じないで、最后に牛客に行ってテストして、意外にも过ごしました!、なんてことだ,今私も理解したくありません.これも私がなぜこの水のためにこの文章を書いたのかの原因です.
でも、そうじゃない!私はやはりjavaのクラスライブラリに従って、大衆化します!、頭部の’5’をループして取り除き、最後に汎用的な正規表現で分割!最終的に以下のコードがありました(これも姉が仕方がないとは思えない状況です...)
package acm.hdu.edu.cn;

import java.util.Arrays;
import java.util.Scanner;

/**
 *1.3.6
 * @author chaplinJ
 *
 */
public class Main5{


    public static void main(String[] args){

        Scanner sc = new Scanner(System.in);
        String st;
        String[] values;
        int[] vas;
        while(sc.hasNext()){
            st = sc.next();
            while(true){
                if(st.charAt(0) == '5'){
                    st = st.substring(1);
                }else{
                    break;
                }
            }
            values = st.split("5+");
            vas = new int[values.length];
            for(int i = 0 ; i < values.length;i++){
                vas[i] = Integer.parseInt(values[i]);
            }
            Arrays.sort(vas);

            for(int i = 0 ; i < vas.length;i++){
                System.out.print(vas[i]);
                if( i!= vas.length - 1){
                    System.out.print(" ");
                }else
                    System.out.println();
            }
        }

    }

}




これで私の6回WAを記念します!
(愚かで、やはりどこが问题があることを知らないで、头が痛くて、先に放して、、、ACの次の问题を続けましょう)