Untitled
unknown
plain_text
2 years ago
3.5 kB
7
Indexable
#define N 1000001 //#include <iostream> //using namespace std; class Node { public: int id; int team; Node *next,*prev; }; Node a[N]; void connect(Node *a,Node *b) { a->next = b; b->prev = a; } class LL{ public: static void erase(Node *node) { connect(node->prev, node->next); } Node *head,*tail; LL() { head= new Node(); tail = new Node(); connect(head, tail); } void add(Node *cur) { Node *p =tail->prev; connect(p,cur); connect(cur, tail); } bool isEmpty(){ return head->next == tail; } void merge2(LL *link2) { if(link2->isEmpty())return; Node *n2 = link2->head->next; Node *p2 = link2->tail->prev; Node *p1 = tail->prev; connect(p1,n2); connect(p2,tail); connect(link2->head, link2->tail); // if (link2->isEmpty())return; //connect(tail->prev, link2->head->next); //connect(link2->tail->prev, tail); //list->initialize(); } void printAll(){ Node *cur = head->next; while(cur !=tail) { //cout<<cur->id <<" "; cur = cur->next; } //cout<<"\n"; } }; //khoi tao LL ll[6][6]; void init() { for(int i=1;i<=5;i++) { for(int j=1;j<=5;j++){ ll[i][j].head= new Node(); ll[i][j].tail = new Node(); connect(ll[i][j].head, ll[i][j].tail); } } } // them linh mID , thuoc team mTeam, danh tieng = mScore void hire(int mID, int mTeam, int mScore) { a[mID].id = mID; a[mID].team = mTeam; ll[mTeam][mScore].add(a+mID); //ll[mTeam][mScore].printAll(); } // loai linh mID void fire(int mID) { LL::erase(a+mID); //cout<<"xoa "<<mID<<"\n"; } // sua danh tieng cua linh mID thanh mScore void updateSoldier(int mID, int mScore) { LL::erase(a+mID); //a[mID].data = mScore; ll[a[mID].team][mScore].add(a+mID); //cout<<"sua diem cua "<<mID<<" thanh "<<mScore<<"\n"; } // sua danh tieng cua team mTeam them mChangeScore ( tu 1=>5) void updateTeam(int mTeam, int mChangeScore) { //cout<<"update team\n"; if(mChangeScore<0){ for(int i=1;i<=5;i++)if(!ll[mTeam][i].isEmpty()){ int u= i + mChangeScore; if(u>5)u=5;else if(u<1)u=1; if(u!=i)ll[mTeam][u].merge2(&ll[mTeam][i]); //cout<<"diem "<<u<<": "; //ll[mTeam][u].printAll(); } }else if(mChangeScore>0) { for(int i=5;i>=1;i--)if(!ll[mTeam][i].isEmpty()){ int u= i + mChangeScore; if(u>5)u=5;else if(u<1)u=1; if(u!=i)ll[mTeam][u].merge2(&ll[mTeam][i]); //cout<<"diem "<<u<<": "; //ll[mTeam][u].printAll(); } } } // dua ra id cua linh co danh tieng cao nhat int bestSoldier(int mTeam) { int maxScore=0; for (int i = 5; i >= 1; i--) { if (!ll[mTeam][i].isEmpty()) { maxScore = i; break; } } int mID = 0; if(maxScore){ Node *cur = ll[mTeam][maxScore].head->next; while (cur != ll[mTeam][maxScore].tail) { if (mID < (cur->id)) mID = cur->id; cur = cur->next; } } //cout<<"best team"<<mTeam<<" la "<<mID<<"\n"; return mID; }
Editor is loading...