Untitled
unknown
plain_text
a year ago
4.1 kB
6
Indexable
package H2118; class UserSolution { static Person[] listSoildier = new Person[100001]; static int idSold = 0; static Person[][] mapHead = new Person[6][6]; static Person[][] mapTail = new Person[6][6]; public void init() { listSoildier = new Person[100001]; idSold = 0; for (int team = 1; team <= 5; team++) { for (int score = 1; score <= 5; score++) { mapHead[team][score] = new Person(); mapTail[team][score] = new Person(); mapHead[team][score].next = mapTail[team][score]; mapTail[team][score].prev = mapHead[team][score]; } } } void insertFirst(Person solider, int score) { solider.next = mapHead[solider.mTeam][score].next; solider.prev = mapHead[solider.mTeam][score]; mapHead[solider.mTeam][score].next.prev = solider; mapHead[solider.mTeam][score].next = solider; } boolean isEmpty(int team, int score) { return mapHead[team][score].next == mapTail[team][score]; } public void hire(int mID, int mTeam, int mScore) { listSoildier[mID] = new Person(mID, mTeam, mScore); insertFirst(listSoildier[mID], mScore); } public void fire(int mID) { // delete(mID, listSoildier[mID].mScore); listSoildier[mID].prev.next = listSoildier[mID].next; listSoildier[mID].next.prev = listSoildier[mID].prev; // size[listSoildier[mID].mTeam][listSoildier[mID].mScore]--; listSoildier[mID].mID = -1; listSoildier[mID].mTeam = -1; listSoildier[mID].mScore = -1; } public void updateSoldier(int mID, int mScore) { listSoildier[mID].prev.next = listSoildier[mID].next; listSoildier[mID].next.prev = listSoildier[mID].prev; listSoildier[mID].mScore = mScore; insertFirst(listSoildier[mID], mScore); } public void updateTeam(int mTeam, int mChangeScore) { if (mChangeScore > 0) { for (int i = 1; i <= mChangeScore; i++) { int scoreGroup = 4; while (scoreGroup >= 1) { if (mapHead[mTeam][scoreGroup].next == mapTail[mTeam][scoreGroup]) { scoreGroup--; continue; } mapHead[mTeam][scoreGroup].next.prev = mapTail[mTeam][scoreGroup + 1].prev; mapTail[mTeam][scoreGroup + 1].prev.next = mapHead[mTeam][scoreGroup].next; mapTail[mTeam][scoreGroup].prev.next = mapTail[mTeam][scoreGroup + 1]; mapTail[mTeam][scoreGroup + 1].prev = mapTail[mTeam][scoreGroup].prev; // reset rong mapHead[mTeam][scoreGroup].next = mapTail[mTeam][scoreGroup]; mapTail[mTeam][scoreGroup].prev = mapHead[mTeam][scoreGroup]; scoreGroup--; } } } else if (mChangeScore < 0) { for (int i = 1; i <= (-mChangeScore); i++) { int scoreGroup = 2; while (scoreGroup <= 5) { if (mapHead[mTeam][scoreGroup].next == mapTail[mTeam][scoreGroup]) { scoreGroup++; continue; } mapTail[mTeam][scoreGroup - 1].prev.next = mapHead[mTeam][scoreGroup].next; mapHead[mTeam][scoreGroup].next.prev = mapTail[mTeam][scoreGroup - 1].prev; mapTail[mTeam][scoreGroup].prev.next = mapTail[mTeam][scoreGroup - 1]; mapTail[mTeam][scoreGroup - 1].prev = mapTail[mTeam][scoreGroup].prev; // reset rong mapHead[mTeam][scoreGroup].next = mapTail[mTeam][scoreGroup]; mapTail[mTeam][scoreGroup].prev = mapHead[mTeam][scoreGroup]; scoreGroup++; } } } } public int bestSoldier(int mTeam) { int id = -1; for (int i = 5; i >= 1; i--) { id = -1; Person head = mapHead[mTeam][i]; Person tail = mapTail[mTeam][i]; Person temp = head; while (temp != null && temp.next != tail) { temp = temp.next; if (id < temp.mID) { id = temp.mID; } } if (id != -1) { return id; } } return id; } } class Person { int mTeam; int mScore; int mID; Person next; Person prev; public Person() { super(); mID = -1; mTeam = -1; mScore = -1; next = prev = null; } public Person(int ID, int mTeam, int mScore) { super(); this.mID = ID; this.mTeam = mTeam; this.mScore = mScore; next = prev = null; } }
Editor is loading...
Leave a Comment