I get all the test cases here right but it gives me Wrong Answer
Code: Select all
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.text.DecimalFormat;
import java.util.Arrays;
import java.util.StringTokenizer;
public class LightAndTransparencies4
{
public static void main(String[]args) throws IOException
{
PrintWriter out = new PrintWriter(System.out);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int tests = Integer.parseInt(br.readLine());
StringTokenizer st;long[]x1,x2,r,e,v;int nl,i,j,c=0;double y;String x;
DecimalFormat dec = new DecimalFormat("0.000");
while(tests-->0)
{
c=0;
br.readLine();
nl=Integer.parseInt(br.readLine());
x1=new long[nl];
x2=new long[nl];
r=new long[nl];
e=new long[(nl-1)*2+3];
v=new long[(nl-1)*2+3];
for(i=0;i<nl;i++)
{
st = new StringTokenizer(br.readLine());
y=Double.parseDouble(st.nextToken());
x1[i]=(long)(y*1000.0);
e[c++]=x1[i];
st.nextToken();
y=Double.parseDouble(st.nextToken());
x2[i]=(long)(y*1000.0);
e[c++]=x2[i];
st.nextToken();
if(x2[i]<x1[i])
{
long temp=x1[i];
x1[i]=x2[i];
x2[i]=temp;
}
y=Double.parseDouble(st.nextToken());
r[i]=(long)(y*1000.0);
}
//sorting
for(i=0;i<nl-1;i++)
{
for(j=i+1;j<nl;j++)
{
if(x1[j]<x1[i])
{
long temp1=x1[i],temp2=x2[i],temp3=r[i];
x1[i]=x1[j];x2[i]=x2[j];r[i]=r[j];
x1[j]=temp1;x2[j]=temp2;r[j]=temp3;
}
}
}//done sorting
e[c]=Long.MAX_VALUE;
Arrays.sort(e);
v[c]=1000;
v[0]=1000;
for(i=1;i<c;i++)
v[i]=1000;
c=1;
while (c<e.length-1)
{
for(i=0;i<nl;i++)
{
if(e[c]>x1[i]&&e[c]<=x2[i])
{
v[c]=v[c]*r[i]/1000;
}
}
c++;
}
out.println(e.length);
out.println("-inf "+dec.format(x1[0]/1000.0)+" 1.000");
for(i=1;i<e.length-1;i++)
{
x=dec.format(v[i]/1000.0);
out.println(dec.format(e[i-1]/1000.0)+" "+dec.format(e[i]/1000.0)+" "+x);
}
out.println(dec.format(x2[nl-1]/1000.0)+" +inf 1.000");
if(tests!=0)
out.println();
}
out.flush();
}
}