写了一晚上,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. javascript继承机制 & call apply使用说明

    一.继承机制 1.对象冒充:构造函数使用 this 关键字给所有属性和方法赋值,可使 ClassA 构造函数成为 ClassB 的方法,然后调用它. function ClassZ() { this. ...

  2. Android中TextView设置字体

    最近项目中出现把字体设置成宋体,微软雅黑,黑体,楷体等的需求; 度娘发现Android系统默认支持三种字体,分别为:“sans”, “serif”, “monospace",除此之外还可以使 ...

  3. Django rest framework 的认证流程(源码分析)

    一.基本流程举例: urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^users/', views.HostView.as_view() ...

  4. SQL语句获取时间的方法

    1. 当前系统日期.时间select getdate() 2. dateadd 在向指定日期加上一段时间的基础上,返回新的 datetime 值例如:向日期加上2天select dateadd(day ...

  5. C#多线程编程之:集合类中Synchronized方法与SyncRoot属性原理分析

    我们知道,在.net的一些集合类型中,譬如Hashtable和ArrayList,都有Synchronized静态方法和SyncRoot属性,他们之间有联系吗?我怎么才能用好他们呢? 以Hashtab ...

  6. LeetCode解题报告—— Reverse Nodes in k-Group && Sudoku Solver

    1. Reverse Nodes in k-Group Given a linked list, reverse the nodes of a linked list k at a time and ...

  7. hdu 2883(构图+最大流+压缩区间)

    kebab Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  8. 数据库之存储过程(Stored Procedure)【未完待续】

    存储过程(Stored Procedure,以下简称SP)是啥?有什么用?优缺点? 一个SP是一段存储在数据库系统中的一条或多条sql语句的集合,类似一条批处理,它能被触发器,或者其他的SP以及APP ...

  9. 前端的3D(css3版本)--淘宝造物节3D创景的制作

    其实是依托Css3的功劳,先上一个例子 链接: https://pan.baidu.com/s/1cZ-mMI01FHO3u793ZhvF2w 提取码: d3s7代码地址:链接: https://pa ...

  10. bzoj 1485 卡特兰数 + 分解因子

    思路:打表可以看出是卡特兰数,但是模数不一定是素数,所以需要分解一下因数. #include<bits/stdc++.h> #define LL long long #define fi ...