Untitled
unknown
plain_text
2 years ago
4.1 kB
10
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