4.25美团笔试 专项题 求解

一道子弹、防护罩的题
调了好久只有55%
有没有大佬解释,发份代码研究一下
#笔试题目##美团#
全部评论
#define ll long long const int N = 1e5 + 2; int Q,n,m,k,q[N],e[N]; struct P { int t,r; } p[N]; bool vis[N],fir[N]; set<int>st; int main() { scanf("%d %d %d",&n,&m,&k); for(int i = 1; i <= k; ++ i) { scanf("%d",q + i); st.insert(q[i]); } st.insert(-1); for(int i = 1; i <= m; ++ i) scanf("%d %d",&p[i].t,&p[i].r); int id = k,nid = 0; bool f = true; for(int i = 1; i <= m; ++ i) { if(!vis[p[i].r]) { vis[p[i].r] = true; fir[i] = true; } else { auto d = st.upper_bound(p[i].t); -- d; if((*d) == -1) { f = false; } else { st.erase((*d)); } } } if(f) { for(auto x : st) { if(x != -1) { e[++ nid] = x; } } for(int i = m; i >= 1; -- i) { if(fir[i]) { while(nid >= 1 && e[nid] >= p[i].t)  -- nid; if(nid >= 1) { vis[p[i].r] = false; -- nid; } } } int ans = n; for(int i = 1; i <= n; ++ i) ans = ans - vis[i]; printf("%d\n",ans); } else puts("-1"); return 0; }
点赞 回复
分享
发布于 2021-04-25 13:22

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务