为什么我的代码超出了ans的时间限制? 我在CodeChef上尝试了这个问题。我的逻辑是正确的,但我的答案是显示超出时限,我不知道为什么?
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]);
}
}
}
答案 0 :(得分:1)
请正确阅读问题 -
Rupsa最近开始在Chef下实习。他给了她N种不同数量A1,A2,......,AN的成分来储存它。但由于她懒得安排她们,所以把它们都放在一个储物盒里。
Chef提出了一个新配方并决定准备它。他要求Rupsa为这道菜提供两种每种类型的成分。但当她去检索食材时,她意识到她一次只能从盒子里挑选一件物品,并且只有在她拿出它之后才能知道它的类型。挑选的物品不会放回包里。
她懒惰,想要知道在最坏的情况下她需要从盒子中挑选物品的最大次数,以确保她至少得到每种类型成分的两个单位。如果无法以这种方式挑选物品,请打印-1。
你没有处理这种情况,其中一种成分少于2个单位,在这种情况下你应该打印-1。