Note :- it's not necessary to have a "speed" input at the end of the first line
and if that’s the case we have to print distance 0.00 km (distance must be printed for every query.)
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.text.DecimalFormat; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String input; StringBuffer sb=new StringBuffer(""); String lasttime=""; double distance=0; double lastspeed=0; int t=0; while((input=br.readLine())!=null) { String s[]=input.split(" "); if(s.length==1) { if(lasttime!="") { String s1[]=s[0].split(":"); double time1=Double.parseDouble(s1[0])+Double.parseDouble(s1[1])/60+Double.parseDouble(s1[2])/3600; String s2[]=lasttime.split(":"); double time2=Double.parseDouble(s2[0])+Double.parseDouble(s2[1])/60+Double.parseDouble(s2[2])/3600; //calculate timediff=s[0]-lasttime; //distance1=distance+lastspeed*timediff; //sop (s[0]+" "+distance1+" km"); double timediff=time1-time2; double distance1=distance+lastspeed*timediff; DecimalFormat df = new DecimalFormat("0.00"); sb.append(s[0]+" "+df.format(distance1)+" km"); sb.append("\n"); } else { sb.append(s[0]+" 0.00 km"); sb.append("\n"); } } else { if(t==0) { t++; lasttime=s[0]; lastspeed=Double.parseDouble(s[1]); } else { String s1[]=s[0].split(":"); double time1=Double.parseDouble(s1[0])+Double.parseDouble(s1[1])/60+Double.parseDouble(s1[2])/3600; String s2[]=lasttime.split(":"); double time2=Double.parseDouble(s2[0])+Double.parseDouble(s2[1])/60+Double.parseDouble(s2[2])/3600; double timediff=time1-time2; distance=distance+lastspeed*timediff; //calculate timediff=s[0]-lasttime; //distance=lastspeed*timediff; lasttime=s[0]; lastspeed=Double.parseDouble(s[1]); } } } System.out.print(sb); } }