**PAT浙大甲级 1095
来源:互联网 发布:婚礼沙画软件 编辑:程序博客网 时间:2024/06/05 13:34
这个题很注重时间复杂性,我是用map<string,vector<node> >来存每一个号码的车的记录。对每个不同号码的车将不有效的记录删除,然后添加到vector<node>中,同时统计不同号码的车一天内停车的总时间,并加结果添加到vector<nod>中,然后对vector<node>进行排序,注意题目中是按照时间的递增进行查询,因此在进行某次查询时,从上一次查询中断的位置开始进行查询,输出结果。最后对vector<nod>进行排序,输出停车时间最长的车号(按字典序) 以及停车时间。
AC代码:
#include<iostream>#include<map>#include<cstdio>#include<algorithm>#include<queue>#include<cstring>#include<set>#include<stack>#include<cmath>#include<vector>#include<hash_map>#define ll long long#define inf 24*60*60using namespace std;struct node{ string id; int time; int state;};struct nod{ string id; int sum;};vector<node> v;bool cmp(node x,node y){ return x.time<y.time;}bool cmp1(nod x,nod y){ if(x.sum!=y.sum) { return x.sum>y.sum; } else { return x.id<y.id; }}map<string,int> nn;map<string,vector<node> >mm;vector<nod> vv;int main(){ int n,k; scanf("%d %d",&n,&k); for(int i=0;i<n;i++) { node tmp; cin>>tmp.id; int a,b,c; char sta[5]; scanf("%d:%d:%d %s",&a,&b,&c,sta); int time=a*3600+b*60+c; tmp.time=time; if(sta[0]=='i') { tmp.state=1; } else { tmp.state=-1; } mm[tmp.id].push_back(tmp); nn[tmp.id]=0; } map<string,vector<node> >::iterator it; for(it=mm.begin();it!=mm.end();it++) { sort(it->second.begin(),it->second.end(),cmp); stack<node> ss; int sum=0; int len=it->second.size(); for(int i=0;i<len;i++) { if(it->second[i].state==1) { if(ss.empty()) { ss.push(it->second[i]); } else { ss.pop(); ss.push(it->second[i]); } } else { if(ss.empty()) { continue; } else { node tmp=ss.top(); ss.pop(); int r=it->second[i].time; v.push_back(tmp); v.push_back(it->second[i]); sum+=r-tmp.time; } } } nod tt; tt.id=it->first; tt.sum=sum; vv.push_back(tt); } sort(v.begin(),v.end(),cmp); int len=v.size(); int biao=0; int ans=0; for(int i=0;i<k;i++) { int a,b,c; scanf("%d:%d:%d",&a,&b,&c); int time=a*3600+b*60+c; int re=ans; for(int j=biao;j<len;j++) { if(v[j].time>time) { biao=j; ans=re; break; } else { int t=nn[v[j].id]; if(t+v[j].state==1) { re++; nn[v[j].id]++; } else if(t+v[j].state==0) { re--; nn[v[j].id]--; } } } printf("%d\n",re); } sort(vv.begin(),vv.end(),cmp1); int maxx=vv[0].sum; for(int i=0;i<vv.size();i++) { if(vv[i].sum==maxx) { cout<<vv[i].id<<" "; } else { break; } } int xiaoshi=maxx/3600; int fen=(maxx%3600)/60; int miao=maxx%60; printf("%02d:%02d:%02d",xiaoshi,fen,miao);}
0 0
- **PAT浙大甲级 1095
- 浙大pat甲级 1023
- 浙大pat甲级 1024
- 浙大pat甲级 1025
- 浙大PAT甲级 1026
- 浙大PAT甲级 1028
- 浙大PAT甲级 1029
- 浙大PAT甲级 1030
- 浙大PAT甲级 1031
- 浙大PAT甲级 1032
- 浙大PAT甲级 1033
- 浙大PAT甲级 1035
- 浙大PAT甲级 1037
- 浙大PAT甲级 1039
- 浙大PAT甲级 1040
- 浙大PAT甲级 1038
- 浙大PAT甲级 1041
- 浙大PAT甲级 1042
- RxAndroid从零开始学之四(常见操作符)
- 期望dp递推
- 解决在Xcode编译出现"_iconv_open", referenced from: 的问题
- sql查看cpu使用最多的和經常重編譯的
- 做一款仿映客的直播
- **PAT浙大甲级 1095
- Android网络应用
- 关于内联元素间距问题的解决办法
- 移动端适配之雪碧图(sprite)背景图片定位
- C++类与对象
- 【3】数据结构与算法-3 冒泡排序算法
- C# 判断图形文件(GIF,JPG,PNG)的图片格式的方法
- [51nod 1421]最大MOD值
- .NET chart 毫秒级坐标轴