1

私はJavaで比較的新しく、行と列の合計数が2と1000の間にあるバイナリマトリックスを入力として取り込もうとしています.BufferedInputStreamを使用しています.小さなマトリックスの場合、私のコードは機能しています(正しい出力を与えます)たとえば、4x4 マトリックス。しかし、6x9 入力では機能しません。実は私はUVAの問題番号12367を解決しようとしています.

私のコード

 import java.io.BufferedInputStream;
 import java.util.Scanner;

 class Main {
    static int totalOne=0;

    public static int swapCount(int array[]) {
        int L = array.length, s=0;
        for (int n=0;n<L;n++) {                     
            int avg = totalOne / L;
            if (array[n]>avg) {
                int x=1;    
                while (array[n]>avg) {
                    int t = n+x;
                    int u = n-x;

                    if (t>L-1) {
                        if (array[t-L]<avg) {                           
                                array[n]--;
                                array[t-L]++;
                                s++;                            
                        }
                    }   
                    else {
                        if (array[t]<avg) {                         
                            array[n]--;
                            array[t]++;
                            s++;                            
                        } 
                    }

                    if (array[n]>avg) { 
                        if (u<0) {
                            if (array[u+L]<avg) {                           
                                        array[n]--;
                                        array[u+L]++;
                                        s++;                            
                                }
                        }
                        else {
                                if (array[u]<avg) {                         
                                    array[n]--;
                                    array[u]++;
                                    s++;                            
                                } 
                        }
                    }
                }
                x++;
            }       
        }
        return s;
    }

    public static void main(String args[]) {
        Scanner stdin = new Scanner(new BufferedInputStream(System.in));

            int t = stdin.nextInt();
            int a,b,i=0,flag=0,swap=0;
            String result = new String();
            if (t<=10) {
                while (i<t) {
                    i++;
                    totalOne = 0;
                    int R = stdin.nextInt();
                    int C = stdin.nextInt();
                    int [][] arr = new int [R][C];
                    int [] rowOne= new int [R];
                    int [] colOne= new int [C];
                    if (2<=R&&2<=C&&R<=1000&&C<=1000)  {
                        for (a=0;a<R;a++) {
                            for (b=0;b<C;b++) {
                                arr[a][b]=stdin.nextInt();
                                if (arr[a][b]!=0 && arr[a][b]!=1)
                                    flag=1;
                                if (arr[a][b]==1){
                                    rowOne[a]++;
                                    colOne[b]++;
                                }
                            }
                        }

                        if (flag==0) {
                            for (a=0;a<R;a++)
                            totalOne=totalOne+rowOne[a];
                            if (totalOne%R==0) {
                                result = "row";
                                swap = swapCount(rowOne);
                                if (totalOne%C==0) {
                                    result = "both";
                                    swap = swap + swapCount(colOne);
                                }
                            }
                            else {
                                if (totalOne%C==0) {
                                    result = "column";
                                    swap = swapCount(colOne);
                                }
                                else {
                                    result = "impossible";
                                }
                            }               


                            if (result.equals("impossible")) 
                                System.out.println("Case "+i+": "+result);  
                            else {  
                                System.out.println("Case "+i+": "+result+" "+swap);
                            }                       

                        }   
                    }
            }
        }
       System.exit(0);
    }
 }

次のような入力の場合:

1
4 4
0 0 0 0
1 1 1 1
0 0 0 0
1 1 1 1

(1 はテスト ケースの数、4 4 は行列の次元、残りは行列の要素)

出力は「ケース 1: 両方 4」ですが、これは予想されるものですが、以下のような入力の場合は -

1
6 9
1 0 1 0 1 1 1 0 1
0 0 0 1 0 1 0 0 1
1 1 0 1 0 0 0 0 1
0 0 0 0 1 0 0 1 0
1 0 0 1 0 0 0 0 0
0 0 0 0 1 0 0 0 0

出力がありません。デバッグ時に、すべての行列要素を読み取る前に、メインスレッドからステップ実行しているため、プログラムが実行されていないことがわかりました。

誰でも問題がどこにあるのか教えてもらえますか:(バッファサイズに関連していますか?

4

0 に答える 0