写了一晚上,TLE到死,我选择GG

喵的好像还是前几年我校出的题,这整场都……tm……

改日在战

/*TLE代码*/

#include<cstdio>
#include<vector>
#include<string>
#include<cstring>
#include<map>
#include<algorithm>
#include<iostream>
#include<set>
int e;
using namespace std;
map<string,int>ma;
struct data{
vector<int>lasts;
int solved,penalty;
string name;/*
data(const int &_solved,const int &_penalty,const vector<int> & _lasts,const string &_name){
solved=_solved;
penalty=_penalty;
lasts=_lasts;
name=_name;
}*/
data(const string &_name){
solved=penalty=0;
name=_name;
lasts.clear();
}
data(){}
};
bool operator < (const data &a,const data &b){
if(a.solved!=b.solved){
return a.solved>b.solved;
}
if(a.penalty!=b.penalty){
return a.penalty<b.penalty;
}
for(int i=a.lasts.size()-1,j=b.lasts.size()-1;i>=0 && j>=0;--i,--j){
if(a.lasts[i]!=b.lasts[j]){
return a.lasts[i]<b.lasts[j];
}
}
return a.name>b.name;
}
typedef set<data>::iterator set_ITER;
struct Query{
string name;
char pro;
int t,type;
}Q[50010];
bool operator < (const Query &a,const Query &b){
if(a.t!=b.t){
return a.t<b.t;
}
return a.type<b.type;
}
set<data>S;
data A[50010],output[50010];
int p;
int B[50010][26]/*,D[50010][26]*/,aftersubs[50010][26];
int C[50010][26],E[50010][26];
int n,m,T,t,ZU;
int main(){
// freopen("i.in","r",stdin);
char tmp1[10],tmp2[10];
scanf("%d",&ZU);
for(int zu=1;zu<=ZU;++zu){
printf("Case #%d:\n",zu);
// memset(aftersubs,0,sizeof(int)*(e+1)*26);
// memset(B,0,sizeof(int)*(e+1)*26);
// memset(C,0,sizeof(int)*(e+1)*26);
// memset(D,0,sizeof(int)*(e+1)*26);
// memset(E,0,sizeof(int)*(e+1)*26);
ma.clear();
e=0;
S.clear();
p=0;
S.insert(data(""));
scanf("%d%d%d%d",&n,&m,&T,&t);
for(int i=1;i<=n;++i){
cin>>Q[i].name;
if(!ma[Q[i].name]){
ma[Q[i].name]=++e;
A[e]=data(Q[i].name);
S.insert(A[e]);
}
scanf("%s%d%s",tmp1,&Q[i].t,tmp2);
Q[i].pro=tmp1[0];
if(tmp2[0]=='E'){
Q[i].type=0;
}
if(tmp2[0]=='N'){
Q[i].type=1;
}
else{
Q[i].type=2;
}
}
sort(Q+1,Q+n+1);
for(int i=1;i<=n;++i){
int id=ma[Q[i].name];
if(Q[i].t>=t){
++aftersubs[id][Q[i].pro-'A'];
continue;
}
if(Q[i].type==0 || (Q[i].type==2 && C[id][Q[i].pro-'A'])){
continue;
}
if(Q[i].type==1){
++B[id][Q[i].pro-'A'];
// ++D[id][Q[i].pro-'A'];
}
else{
S.erase(A[id]);
C[id][Q[i].pro-'A']=Q[i].t;
E[id][Q[i].pro-'A']=Q[i].t;
++A[id].solved;
A[id].penalty+=(Q[i].t+B[id][Q[i].pro-'A']*20);
A[id].lasts.push_back(Q[i].t);
S.insert(A[id]);
}
}
int rank=1;
set_ITER jt=S.begin(); ++jt;
for(set_ITER it=S.begin();;++it,++rank,++jt){
if(jt==S.end()){
break;
}
cout<<(*it).name<<' '<<rank<<' '<<(*it).solved<<' '<<(*it).penalty;
int id=ma[(*it).name];
for(int i=0;i<m;++i){
putchar(' ');
if(C[id][i]){
putchar('+');
if(B[id][i]){
printf("%d",B[id][i]);
}
}
else{
if(aftersubs[id][i]){
if(B[id][i]){
printf("-%d",B[id][i]);
}
else{
putchar('0');
}
putchar('/');
printf("%d",aftersubs[id][i]);
}
else{
if(B[id][i]){
printf("-%d",B[id][i]);
}
else{
putchar('.');
}
}
}
}
puts("");
}
int From;
for(int i=1;i<=n;++i){
if(Q[i].t>=t){
From=i;
break;
}
}
for(int i=From;i<=n;++i){
int id=ma[Q[i].name];
if(Q[i].type==0 || (Q[i].type==2 && C[id][Q[i].pro-'A'])){
continue;
}
else if(Q[i].type==1){
++B[id][Q[i].pro-'A'];
}
else{
C[id][Q[i].pro-'A']=Q[i].t;
++A[id].solved;
}
}
set_ITER it=S.end(); --it; --it;
while(1){
bool allsolved=0;
while((*it).solved==A[ma[(*it).name]].solved){
if(it==S.begin()){
allsolved=1;
break;
}
jt=it; --jt;
output[++p]=(*it);
S.erase(it);
it=jt;
}
if(allsolved){
output[++p]=(*S.begin());
break;
}
data nextFrom;
if(it!=S.begin()){
--it;
nextFrom=(*it);
++it;
}
int id=ma[(*it).name];
for(int i=0;i<m;++i){
if(C[id][i]!=E[id][i]){
E[id][i]=C[id][i];
data tmp=(*it);
set_ITER jt=it;
data __next=*(++jt);
++tmp.solved;
tmp.penalty+=(C[id][i]+B[id][i]*20);
tmp.lasts.push_back(C[id][i]);
S.erase(it);
S.insert(tmp);
it=S.find(tmp);
++it;
if((*it).name!=__next.name){
cout<<tmp.name<<' '<<(*it).name<<' '<<tmp.solved<<' '<<tmp.penalty<<endl;
it=S.find(nextFrom);
}
else{
--it;
}
break;
}
}
}
for(int i=p,rank=1;i>=1;--i,++rank){
int id=ma[output[i].name];
cout<<output[i].name<<' '<<rank<<' '<<output[i].solved<<' '<<output[i].penalty;
for(int j=0;j<m;++j){
putchar(' ');
if(C[id][j]){
putchar('+');
if(B[id][j]){
printf("%d",B[id][j]);
}
}
else{
if(B[id][j]){
printf("-%d",B[id][j]);
}
else{
putchar('.');
}
}
}
puts("");
}
for(int i=1;i<=n;++i){
int id=ma[Q[i].name];
aftersubs[id][Q[i].pro-'A']=
B[id][Q[i].pro-'A']=
C[id][Q[i].pro-'A']=
E[id][Q[i].pro-'A']=0;
}
}
return 0;
}

【模拟】【set】hdu 4789 ICPC Ranking的更多相关文章

  1. HDU 5949 Relative atomic mass 【模拟】 (2016ACM/ICPC亚洲区沈阳站)

    Relative atomic mass Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Oth ...

  2. HDU 5873 Football Games 【模拟】 (2016 ACM/ICPC Asia Regional Dalian Online)

    Football Games Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)To ...

  3. 【贪心】【模拟】HDU 5491 The Next (2015 ACM/ICPC Asia Regional Hefei Online)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5491 题目大意: 一个数D(0<=D<231),求比D大的第一个满足:二进制下1个个数在 ...

  4. 【模拟】HDU 5774 Where Amazing Happens

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5774 题目大意: 已知1946~2015每一年赢得人是谁,给n个名字,问赢了多少次. 题目思路: [ ...

  5. 【模拟】HDU 5762 Teacher Bo

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5762 题目大意: 给n个点,坐标范围0~m(n,m<=105),求是否存在2个点对满足哈夫曼距 ...

  6. 【模拟】HDU 5752 Sqrt Bo

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5752 题目大意: 定义f(n)=⌊√n⌋,fy(n)=f(fy-1(n)),求y使得fy(n)=1. ...

  7. HDOJ(HDU) 2309 ICPC Score Totalizer Software(求平均值)

    Problem Description The International Clown and Pierrot Competition (ICPC), is one of the most disti ...

  8. 并行程序模拟(Concurrency Simulator, ACM/ICPC World Finals 1991,Uva210)

    任务介绍 你的任务是模拟n个程序的并行运算.(按照输入编号为1~n)的并行执行. 代码实现 #define LOCAL #include<bits/stdc++.h> using name ...

  9. HDU 5437 & ICPC 2015 Changchun Alisha's Party(优先队列)

    Alisha’s Party Time Limit: 3000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) ...

随机推荐

  1. poj 2762 tarjan缩点+拓扑序

    2013-09-08 10:00 var m, n :longint; t :longint; f, last :..] of longint; pre, other :..] of longint; ...

  2. error 0152: No Entity Framework provider found for the ADO.NET provider with invariant name 'System.Data.SqlClient'

    error 0152: No Entity Framework provider found for the ADO.NET provider with invariant name 'System. ...

  3. Python 编码问题:出现中文乱码-- (转)

    问题描述: 在写Python代码的过程中,有用到需要输出中文的地方(python2.6.5在中文注释的地方就会出错),但是运行后会出错 我的错误显示: SyntaxError: Non-ASCII c ...

  4. 关于解决coursera视频缓冲问题

    关于解决coursera视频缓冲问题 之前使用coursera,不FQ的话,视频根本加载不出来,于是每次都FQ过去看的视频.后来发现可以直接修改hosts就可以了. 以下方法来源知乎的回答(侵删). ...

  5. Linux时间子系统之八:动态时钟框架(CONFIG_NO_HZ、tickless)【转】

    转自:http://blog.csdn.net/droidphone/article/details/8112948 版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[-] 数据结 ...

  6. 自动安装jar包到本地仓库

    参考博客:http://blog.csdn.net/m0_37797991/article/details/73394873

  7. hadoop-Rpc使用实例

    代码:https://github.com/xufeng79x/hadoop-common-rpc-demo 1. 简介 hadoop中使用rpc机制来进行分布式进程间的通信,被封装进了hadoop- ...

  8. php性能的问题

    一.影响php性能的常见原因 1.php自身语法使用不当 2.php做了不擅长的时期() 3.php的周边环境(服务器Linux,磁盘:文件存储,数据库,缓存:内存,网络:带宽) 4.php自身的短板 ...

  9. chain模块将两个列表合并

    示例代码 from itertools import chain v1 = [11,22,33] v2 = ['a','b','c'] for item in chain(v1,v2): print( ...

  10. 怎么WordPress增加在线投稿功能

    现在很多个人博客为了增加博客的内容,都会提供投稿通道,大部分都是以邮箱的形式进行投稿,不过这样一来,也很费人力,要拷贝复制,然后编辑等.如果给博客加个在线投稿功能,那就方便多了.稍微审核下文章内容就可 ...