Untitled
unknown
plain_text
a year ago
2.6 kB
4
Indexable
package H2122; import java.util.ArrayDeque; import java.util.HashMap; import java.util.PriorityQueue; import java.util.Queue; class UserSolution { final static int MAXN = 100; final static int MAXL = 8; class User { int TicketTime, BikeTime, TimePick = -1; } long tolong(char s[]) { long h = 0; for (int i = 0; s[i] != 0; i++) { h = h << 5 | (s[i] - 'a' + 1); } return h; } class Station { int DeliTime; Queue<Integer> BikeList = new PriorityQueue<Integer>(); Queue<Integer> queue = new ArrayDeque<>(); void init(int delitime) { this.DeliTime = delitime; BikeList.clear(); queue.clear(); } void add(int utime, int ctime) { if (utime > DurableTime) { queue.add(ctime + DeliTime); } else { BikeList.add(utime); } } void sync(int time) { if (queue.size() > 0 && queue.peek() <= time) { BikeList.add(0); queue.poll(); } } } Station sta[] = new Station[101]; HashMap<Long, User> useMap = new HashMap<>(); int DurableTime; public void init(int N, int durableTime, int deliveryTimes[]) { DurableTime = durableTime; for (int i = 0; i < N; i++) { if (sta[i] == null) { sta[i] = new Station(); } sta[i].init(deliveryTimes[i]); } useMap.clear(); } public void addBicycle(int cTimestamp, int pID, int bicycleNum) { for (int i = 0; i < bicycleNum; i++) { sta[pID].BikeList.add(0); } } private User getUser(char[] name) { return useMap.computeIfAbsent(tolong(name), k -> new User()); } public void buyTicket(int cTimestamp, char uName[], int validTime) { User u = getUser(uName); if (u.TicketTime <= cTimestamp) { u.TicketTime = cTimestamp + validTime; } else { u.TicketTime += validTime; } } String toString(char[] tag) { String str = ""; for (int i = 0; tag[i] != '\0'; i++) str += tag[i]; return str; } public int rentBicycle(int cTimestamp, char uName[], int pID) { User u = getUser(uName); Station station = sta[pID]; station.sync(cTimestamp); if (u.TimePick != -1 || u.TicketTime <= cTimestamp || station.BikeList.isEmpty()) { return -1; } u.TimePick = cTimestamp; return u.BikeTime = station.BikeList.poll(); } public int returnBicycle(int cTimestamp, char uName[], int pID) { User u = getUser(uName); if (u.TimePick == -1) { return -1; } sta[pID].add(cTimestamp - u.TimePick + u.BikeTime, cTimestamp); u.TimePick = -1; return u.TicketTime > cTimestamp ? 0 : cTimestamp - u.TicketTime + 1; } }
Editor is loading...
Leave a Comment