Untitled
unknown
plain_text
a year ago
3.4 kB
2
Indexable
class Node{ int id, team, score; public Node() { } public Node(int id, int team, int score) { this.id = id; this.team = team; this.score = score; } Node next, prev; } class DoubleLinkedList{ Node head, tail; public DoubleLinkedList(){ head = new Node(); tail = new Node(); link(head, tail); } public void link(Node lf, Node rt) { lf.next = rt; rt.prev = lf; } public void insert(Node node) { if (head.next != tail) { link(node, head.next); link(head, node); } else { link(node, tail); link(head, node); } } } class UserSolution { Node soilder[]; DoubleLinkedList[][] linkedlist; public void init() { soilder = new Node[100005]; linkedlist = new DoubleLinkedList[6][6]; for (int i=0;i<=5;i++) { for (int j=0;j<=5;j++) { linkedlist[i][j] = new DoubleLinkedList(); } } } public void hire(int mID, int mTeam, int mScore) { soilder[mID] = new Node(mID, mTeam, mScore); linkedlist[mTeam][mScore].insert(soilder[mID]); } public void fire(int mID) { soilder[mID].team = -1; } public void updateSoldier(int mID, int mScore) { Node tsoilder = soilder[mID]; int team = tsoilder.team; tsoilder.team = -1; hire(mID, team, mScore); } public void updateTeam(int mTeam, int mChangeScore) { if (mChangeScore > 0) { for (int i=4;i>=1;i--) { int nscore = i + mChangeScore; if(nscore > 5) { nscore = 5; } update(mTeam, i , nscore); } } else if (mChangeScore < 0){ for (int i=2;i<=5;i++) { int nscore = i + mChangeScore; if (nscore < 1) { nscore = 1; } update(mTeam, i , nscore); } } } private void update(int mTeam, int score, int nScore) { if (linkedlist[mTeam][score].head.next != linkedlist[mTeam][score].tail) { linkedlist[mTeam][score].head.next.prev = linkedlist[mTeam][nScore].tail.prev; linkedlist[mTeam][nScore].tail.prev.next = linkedlist[mTeam][score].head.next; linkedlist[mTeam][nScore].tail = linkedlist[mTeam][score].tail; linkedlist[mTeam][score] = new DoubleLinkedList(); } } public int bestSoldier(int mTeam) { int bestId = -1; for(int i=5;i>=1;i--) { Node curNode = linkedlist[mTeam][i].head; while(curNode != null) { if (mTeam == curNode.team && bestId < curNode.id) { bestId = curNode.id; } curNode = curNode.next; } if (bestId != -1) { // System.out.println("BEST ID--> "+bestId); return bestId; } } return 1; } }
Editor is loading...
Leave a Comment