1

我在java中相对较新,我试图将二进制矩阵作为输入,其中行和列的总数将在2和1000之间。我正在使用BufferedInputStream,对于小矩阵,我的代码正在工作(给出正确的输出)例如 4x4 矩阵。但是对于 6x9 输入,它不起作用。实际上我正在尝试解决 12367 号 UVA 问题。

我的代码

 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 是矩阵维度,其余是矩阵元素)

输出是“Case 1: both 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