L2-034 口罩发放 (25 分)——坑点分析
坑点分析
思路大家应该都明确,说说坑点
- s可能为0, 口罩没有名额
- 同一天,一个人可能申请多次!!
- 输出身体状况为 1 的人是,只要这个人的ID合法且为1,就要存下来输出,顺序按照输入的顺序
- 检查ID是否合法,不仅要判断是否为18位,还要判断每一位是否都是数字
AC代码
#include<bits/stdc++.h>
#define rep(i,x,y) for(int i=x; i<=y; ++i)
#define per(i,x,y) for(int i=x; i>=y; --i)
#define pushk push_back
#define popk pop_back
#define mem(a,b) memset(a,b,sizeof a)
#define PII pair<int,int>
#define ll long long
#define lp p<<1
#define rp p<<1|1
#define INF 0x3f3f3f3f
using namespace std;
const int N = 1e4+9;
struct People{
string name,ID;
int hy;
string time;
int idx;
bool operator<(const People & t) const{
if(time!=t.time) return time<t.time;
else return idx<t.idx;
}
};
struct PP{
string name,ID;
int idx;
bool operator<(const PP & t) const{
return idx<t.idx;
}
};
unordered_map<string,int> mp,vis,cc,hh;
bool check(string id){
if(id.size()!=18) return false;
rep(i,0,17){
if(id[i]<'0' || id[i]>'9') return 0;
}
return 1;
}
int main() {
ios::sync_with_stdio(false),cin.tie(0);
int d,p;
cin>>d>>p;
set<PP> se;
int cnt=0;
rep(i,1,d){
int t,s;
cin>>t>>s;
vector<People> ve;
rep(j,1,t){
string name,ID,time;
int hy;
cin>>name>>ID>>hy>>time;
if(!check(ID)) continue;
cnt++;
if(hy==1 && vis[ID]==0) se.insert({name,ID,cnt}),vis[ID]++;
if(mp[ID] && i-mp[ID]<=p ) continue;
ve.pushk({name,ID,hy,time,j});
}
if(s==0) continue;
sort(ve.begin(), ve.end());
for(auto &it : ve){
if(mp[it.ID]==i) continue;
cout<<it.name<<" "<<it.ID<<'\n';
mp[it.ID]=i;
s--;
if(s<=0) break;
}
}
for(auto &it : se){
cout<<it.name<<" "<<it.ID<<'\n';
}
return 0;
}
一点废话
室友打呼噜睡不着,真的要哭了,起来做一道恶心的题,恶心恶心自己,累了睡大觉
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话