为什么我得到超出我的这段代码的时间限制?
问题描述:
为什么我得到超过了我的这段代码的时间限制? 我在CodeChef.My上试过这个问题的逻辑是正确的,但我的答案显示超出了时间限制,我不知道为什么?为什么我得到超出我的这段代码的时间限制?
http://www.codechef.com/problems/CHEFRP
package test;
import java.io.*;
import java.util.*;
public class Test
{
public static void main(String[] args)throws IOException{
int TESTCASES;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
TESTCASES=Integer.parseInt(br.readLine());
int b=2*TESTCASES,i=0,m,l;
int a;
String[] lines=new String[b];
int[] N=new int[TESTCASES];
int[][] Ai =new int[TESTCASES][100001];
int[] min=new int[TESTCASES];
int flag=0,minusonecase=-1;
int[] sum=new int[TESTCASES]
;
for(a=0;a<b;a++)
{
lines[a]=br.readLine();
if(a%2==0)
{
N[a/2]=Integer.parseInt(lines[a]);
}
if(a%2!=0)
{
StringTokenizer stz=new StringTokenizer(lines[a]);
for(l=0;l<100001;l++)
{
if(stz.countTokens()!=0)
{
Ai[((a-1)/2)][l]=Integer.parseInt(stz.nextToken());
}
else{
break;
}
}
}
}
for(a=0;a<TESTCASES;a++)
{
min[a]=Ai[a][0];
for(l=0;l<N[a];l++)
{
if(min[a]>Ai[a][l])
{
min[a]=Ai[a][l];
}
sum[a]=sum[a]+Ai[a][l];
}
sum[a]=sum[a]+2-min[a];
}
for(a=0;a<TESTCASES;a++)
{
for(l=0;l<N[a];l++)
{
if(Ai[a][l]==1)
{
System.out.println(minusonecase);
flag=1;
break;
}
}
if(flag==1)
{
flag=0;
continue;
}
System.out.println(sum[a]);
}
}
}
答
请正确读取的问题 -
Rupsa最近厨师下开始实习。他分别给她N种不同数量的成分A1,A2,...,AN进行存储。但由于她懒惰地安排他们,她把他们都放在一个储物盒里。
厨师想出了一个新的配方,并决定准备。他要求Rupsa为这道菜取两种各种类型的配料。但是,当她去取回配料时,她意识到她只能从盒子中一次挑一件物品,并且只有在她挑出后才能知道它的类型。被拣选的物品不会放回包里。
她很懒,想知道在最坏的情况下她需要从箱子中挑选物品的最大次数,以确保她至少得到两种单位的每种成分。如果以这种方式挑选物品是不可能的,请打印-1。
你不处理的情况下,其中一个成分少于2个单位,在这种情况下,你应该打印-1。
但是我正在考虑它 – ErrorrrDetector
现在,如果您获得的时间限制超过,那将是因为您要多次浏览测试用例,并且要经历N次多次。一个更好的解决方案是完成所有工作,包括打印,并可能包括在单个循环中读取输入,尝试一下。 –