您的位置:首页 > 其它

1095. Cars on Campus

2015-10-28 17:32 417 查看

题意 :

有一个学校,每天会有很多车进出;给出N条车辆进出情况和M条询问

每条询问输出当前校园有多少辆车,时间从0点24点 最后输出停留最久的车的车牌号和停留时间, 如果有多个,则按字典序输出车牌号

注意 必须要使得所有数据保证以下情况,否则为无效数据:

1 最开始校园里是没车的

2 最后不能有车停留

3 同一辆车连续多次进入 只有最后一个是正确的

4 同一辆车连续多次出去 只有最开始一个是正确的

题解思路:

用map来记录每一个车牌号的下标

首先将所有语句按时间排序 并保存所有询问时间

遍历一次删除不合法语句

再遍历一次 设置一个询问指针

当时间符合要求则输出当前车辆数

用set来保存所有停留最久的车牌号

初解误区:

一开始没有考虑有效数据的情况,最终代码也崩在这里;也没有考虑一车可以多次进入的情况。看来以后要好好读题了。贴一下半成品代码:

import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Vector;

public class hello{
public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
int b = scanner.nextInt();
boolean exitflag = false;
Vector<record> vector = new Vector<record>();
scanner.nextLine();
for (int i = 0; i < a; i++) {
String string = scanner.nextLine();
String[] temp = string.split(" ");
record re = new record(temp[0],temp[1],temp[2]);
exitflag = false;

for (int j = vector.size() -1; j >= 0; j--) {
record rec = vector.get(j);
if (rec.plate.equals(re.plate)) {
if (re.io.equals("in")) {
if (rec.io.equals(re.io)) {
rec.time = re.time;
System.out.println(re.plate+" "+re.time+" "+re.io);
exitflag = true;
}
}
else {
if (rec.io.equals(re.io)) {
System.out.println(re.plate+" "+re.time+" "+re.io);
exitflag = true;
}
}
break;
}

}
if (!exitflag) {
vector.add(re);
}

}

for (Iterator iterator = vector.iterator(); iterator.hasNext();) {
record record = (record) iterator.next();
System.out.println(record.plate+" "+ record.time);
}
String nowtime;
Vector<record> in = new Vector<record>();
Vector<String> maxplate = new Vector<String>();
int max =0;

Iterator iterator = vector.iterator();
record record = null;
boolean quitflag = false;
boolean firstflag = true;
for (int i = 0; i < b; i++) {
nowtime = scanner.nextLine();
System.out.println(nowtime);
quitflag = false;
while(iterator.hasNext()&&!quitflag) {

if (!firstflag) {
if (record.time.compareTo(nowtime) > 0) {
System.out.println(in.size()-1);
for (record re : in) {
System.out.print(re.plate+" ");
}
quitflag = true;
}
else {
record = (record) iterator.next();
//System.out.println(record.time);

}
}
else {
record = (record) iterator.next();
firstflag = false;

}

if (!quitflag) {
if (record.io.equals("in")) {
in.add(record);
}
else {
for (Iterator iterator2 = in.iterator(); iterator2.hasNext();) {
record record2 = (record) iterator2.next();
if (record2.plate.equals(record.plate)) {
//in.remove(record2);
int temp = comp(record.time,record2.time);
if (temp > max) {
max = temp;
maxplate.clear();
maxplate.add(record.plate);
}
else if (temp == max) {
maxplate.add(record.plate);
}
}

}
}
}

}
}

for (String string : maxplate) {
System.out.print(string+" ");
}
System.out.print(totime(max));
scanner.close();
System.out.println(totime(3670));

}

private static int comp(String time, String time2) {

// TODO Auto-generated method stub
return toint(time2)-toint(time);
}

public static int toint(String time) {

String[] temp = time.split(":");
return Integer.parseInt(temp[0])*3600+Integer.parseInt(temp[1])*60+Integer.parseInt(temp[2]);
}
private static String totime(int max) {

Integer hour = max/3600;
Integer minute = max%3600/60;
Integer sec = max%60;
// TODO Auto-generated method stub
return hour.toString()+":"+minute.toString()+":"+sec.toString();
}

static class mycompare implements Comparator<record>{

public int compare(record r1, record r2) {
if(r1.time.compareTo(r2.time)>0) return 1;
else if (r1.time.compareTo(r2.time)<0) {
return -1;
}
else {
return 0;
}
}
}
static class record {
String plate;
String time;
String io;

public record(String plate, String time, String io) {

this.io = io;
this.plate =plate;
this.time =  time;
// TODO Auto-generated constructor stub
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: