超出SPOJ时限 - 一般

时间:2016-06-19 21:50:37

标签: java performance

我试图解决SPOJ的这个问题:http://br.spoj.com/problems/GENERAL/

我的解决方案适用于Ideone(http://ideone.com/Xj2B9Y),但是当我在SPOJ中使用相同的解决方案时,它会报告TLE - 超出时间限制。

我在互联网上搜索了一个解决方案来改进我的代码。我更换了#34;扫描仪"通过" BufferedReader",但我一直收到消息TLE。

请有人告诉我哪里出错了?

public static void main(String[] args) throws java.lang.Exception
{
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    StringTokenizer st;
    //Scanner scan = new Scanner(System.in);
    int instancias = Integer.parseInt(br.readLine());
    int count = 0;

    while(instancias != 0)
    {
        count = 0;
        boolean possible = true;
        boolean impossible = false;

        st = new StringTokenizer(br.readLine());

        int numSoldados = Integer.parseInt(st.nextToken());
        int distancia = Integer.parseInt(st.nextToken());
        int[] listaSoldados = new int[numSoldados];

        st = new StringTokenizer(br.readLine());

        for (int i = 0; i < numSoldados; i++) 
        {
            listaSoldados[i] = Integer.parseInt(st.nextToken());
        }

        while(possible)
        {
            possible = false;

            for (int i = 0; i < numSoldados; i++) 
            {
                if(numSoldados - (i + distancia) >= 1)
                {
                    int alturaPS = listaSoldados[i];
                    int alturaSS = listaSoldados[i + distancia];

                    if(alturaPS > alturaSS)
                    {
                        listaSoldados[i] = alturaSS;
                        listaSoldados[i + distancia] = alturaPS;
                        count = count + 1;
                        possible = true;
                    }
                }
                else
                {
                    if(!possible)
                    {
                        for (int j = 0; j < numSoldados - 1; j++) 
                        {
                            if(listaSoldados[j] > listaSoldados[j+1])
                            {
                                impossible = true;
                                break;
                            }
                        }

                        break;
                    }

                    break;
                }
            }
        }

        if(impossible)
            System.out.println("impossivel");
        else
            System.out.println(count);

        instancias--;
    }
}

0 个答案:

没有答案