15145641

  这个故事告诉我们,WA了一定要找自己的原因... ...

  当我开始用set去做的时候,发现一直过不去,一开始忘了把初始排名加进去,后来忘了第0秒,第0秒第一的id = 1

  这个题目的做法也不只这一种,应该说这一种是最偷懒的.

  代码如下:

#include<iostream>
#include<cstring>
#include<cstdio>
#include<set>
using namespace std;
#define N 100005
int s[N],win[N];
struct Node {
    int id,sc;
    Node(int i=0,int s=0) {
        id = i;
        sc = s;
    }
    bool operator < (Node A) const {
        if(A.sc != sc) return sc > A.sc;
        else return id < A.id;
    }
};
set<Node> st;
set<Node>::iterator it;
int main() {
//    freopen("C.in.cpp","r",stdin);
    int T,n,q,x,p;
    scanf("%d",&T);
    while(T--) {
        st.clear();
        memset(s,0,sizeof(s));
        scanf("%d%d",&n,&q);
        for(int i = 1; i <= n; i++) {
            st.insert(Node(i,0));
        }
        win[0] = 1;
        for(int i = 1; i <= q; i++) {
            scanf("%d%d",&x,&p);
            st.erase(Node(x,s[x]));
            s[x] += p;
            st.insert(Node(x,s[x]));
            it = st.begin();
            Node tmp = *it;
            win[i] = (*it).id;
        }
        int i;
        for(i = q; i >= 1; i--) {
            if(win[i] != win[i-1]) {
                break;
            }
        }
        printf("%d\n",i);
    }
    return 0;
}

 

posted on 2016-10-20 19:32  icode-xiaohu  阅读(380)  评论(0编辑  收藏  举报