We don't wanna work!

We don't wanna work!

[JAG Asia 2016]

两个set,一个代表工作的,一个代表不工作的

其实是一个很简单的模拟,但是我竟然排序之前标号。。。。

检查代码的时候要从头开始检查。。

#include <bits/stdc++.h>
 
using namespace std;
const int maxn = 1e5+7;
struct node
{
    char s[25];
    int ti,fen;
    bool operator<(const node&r)const
    {
        if(fen==r.fen)
        {
            return ti>r.ti;
        }
        return fen>r.fen;
    }
} s[maxn],tmp;
set<node>st,stt;
set<node>::iterator it;
map<string,int>mp;
char str[25];
char op[5];
int p;
void solve()
{
    if(st.size()>p)
    {
        it=st.end();
        --it;
        tmp=*it;
        cout<<tmp.s<<" is not working now."<<endl;
        st.erase(tmp);
        stt.insert(tmp);
    }
    else if(st.size()<p)
    {
        it=stt.begin();
        tmp=*it;
        cout<<tmp.s<<" is working hard now."<<endl;
        stt.erase(tmp);
        st.insert(tmp);
    }
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    int n;
    cin>>n;
    int cnt=0,tag=0,k;
    p=n*0.2;
    for(int i=1; i<=n; ++i)
    {
        cin>>s[i].s>>k;
        s[i].fen=k;
        s[i].ti=i;
    }
    sort(s+1,s+1+n);
    for(int i=1; i<=n; ++i)
    {
        mp[s[i].s]=++cnt;
        tag++;
        if(i<=p)
        {
            st.insert(s[i]);
        }
        else
        {
            stt.insert(s[i]);
        }
    }
    int m;
    cin>>m;
    int id;
    while(m--)
    {
        cin>>op;
        tag++;
        if(op[0]=='+')
        {
            n++;
            p=n*0.2;
            cin>> str>>k;
            if(mp.count(str))
            {
                id=mp[str];
                s[id].ti=tag;
                s[id].fen=k;
            }
            else
            {
                mp[str]=++cnt;
                s[cnt].fen=k;
                s[cnt].ti=tag;
                strcpy(s[cnt].s,str);
                id=cnt;
            }
            if(st.empty())
            {
                if(p>0&&k>=(*stt.begin()).fen)
                {
                    st.insert(s[id]);
                    cout<<s[id].s<<" is working hard now."<<endl;
                }
                else
                {
                    stt.insert(s[id]);
                    cout<<s[id].s<<" is not working now."<<endl;
                }
            }
            else
            {
                it=st.end();
                --it;
                if(k>=(*it).fen||(st.size()<p&&k>=(*stt.begin()).fen))
                {
                    st.insert(s[id]);
                    cout<<s[id].s<<" is working hard now."<<endl;
                }
                else
                {
                    stt.insert(s[id]);
                    cout<<s[id].s<<" is not working now."<<endl;
                }
            }
            solve();
        }
        else
        {
            n--;
            p=n*0.2;
            cin>>str;
            id=mp[str];
            if(st.find(s[id])!=st.end())
            {
                st.erase(s[id]);
            }
            else
            {
                stt.erase(s[id]);
            }
            solve();
        }
    }
    return 0;
}
全部评论

相关推荐

05-20 21:57
已编辑
门头沟学院 Java
喜欢吃卤蛋的悲伤蛙在提需求:建信融通没消息吧,我2说有实习挂简历不理了
点赞 评论 收藏
分享
大方的大熊猫准备进厂:1.教育背景:你希望从事什么专业的工作你的主修课就是什么;成绩优秀是你应该做的,没什么可描述的,成绩不优秀也许人家在大学忙着创业呢?(成绩优秀不一定是好事,只能说明多元化的大学你上成了高中,没有真正上明白大学,反而体现了你死板,不爱社交,没有别的突出能力) 2.实践经历:你想表达的意思没有说清楚。你是说你会个性化服务,还是你有实习经历。如果没有带来,经济收益,表彰,更好的发展前景,那你还不如说说提升了自己哪些技能。你说有人给你送锦旗我都能明白你优秀,但是你说你会xxxx,你说这话谁信,证据呢。 3.入伍经历:你描述的就是你的工作职责或者你应该做的,并没有体现出来你把这个事情做好了,而且入伍经历并不能证明你能干好你要应聘的工作,不如只写经历其余所有内容都不写。 4.荣誉技能:重点突出一下,但不要过多描述,这些荣誉的含金量懂得都懂。 重点:你要应聘什么工作(具体岗位,实习生不具体),你的期望薪资
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务