我试图解决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--;
}
}