Untitled

 avatar
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