1 条题解
-
0
自动搬运
来自洛谷,原作者为

Wind_Smiled
风颜悦。颜悦因风起,风起故颜悦。||向着不同的方向、我们逐渐远去、背对背的你我、难能再见||这个OP的 uid:266896259搬运于
2025-08-24 22:22:59,当前版本为作者最后更新于2022-09-19 19:54:31,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
题意及解析题目
输入数据共 行。
第一行两个整数 和 ,表示参赛队伍的个数和题目的个数。
接下来 行,每行的输入格式如下:
- 首先输入队伍名称;
- 接下来 个字符串,格式均为
SX/V,说明如下:
S表示题目状态,共有三种字符:-、+、?。-表示该题目该团队未通过,+表示该题目该团队已通过,?表示该题目最后一次提交时排行榜已冻结。X表示该题目该团队的提交次数。特别地,如果该题目该团队未提交,则X省略。V表示该题目该团队最后一次提交时比赛已经开始的时间,用HH:MM:SS表示,可能有前导零来补足。特别地,如该题目未通过,则整个/V部分省略。
最后一行按照前面的格式,输入 NijeZivotJedanACM 的最终成绩(即排行榜解冻后的成绩)
输出 NijeZivotJedanACM 可能会处在的最差排名。
- 对于 的数据,,,保证所有测试数据中,任意两个小组的名字均不同。
贪心与排序
要使 NijeZivotJedanACM 排名靠后,则其余组的排名要尽可能靠前,即将其余组的
?视为+,将 NijeZivotJedanACM 的?视为-。对于此题,使用结构体进行排序名次,手写
cmp函数进行对比判断即可。对于所耗时间,需要进行统一,这里我用了统一成秒数,(因为大单位化小单位好算)最后如果通过了这一题,就加上罚时的秒数,判断即可。
奇奇怪怪的题意
ACM赛制是每提交错误一次就罚时,但罚时的结果是只有你做出来这道题之后才会统计上去,也就是说,只要你一直没做出来这道题,就等于没有罚时。
代码如下:
#include<bits/stdc++.h> using namespace std; const int MAXN=1e3+5,rate=1200;//rate代表小时化为分钟的进率 int n,m,down; int intt(char x){//巧用ASCII码进行char类转int类 return x-'0'; } struct node{ string name; int AC,miao; }a[MAXN]; char ch[MAXN]; bool cmp(node x,node y){ if(x.AC==y.AC){//正确数相等 if(x.miao==y.miao) return x.name<y.name;//时间相等就比较名字字典序 return x.miao<y.miao;//否则比较时间 } return x.AC>y.AC;//通用的判断 } int main(){ scanf("%d %d",&n,&m); for(int i=1;i<=n+1;i++){ cin>>a[i].name; if(i!=n+1&&a[i].name=="NijeZivotJedanACM") down=i;//如果检测到了NijeZivotJedanACM的做题记录,就记录当前下标 for(int j=1;j<=m;j++){ cin>>ch+1; if(ch[1]=='-') continue;//没通过就删了吧 else{ a[i].miao+=3600*intt(ch[5])+60*(10*intt(ch[7])+ch[8])+10*intt(ch[10])+intt(ch[11]); a[i].miao+=(intt(ch[2])-1)*rate; a[i].AC++; } } } a[down]=a[n+1];//把最后一位的数据全部塞进NijeZivotJedanACM的记录中 sort(a+1,a+n+1,cmp); for(int i=1;i<=n;i++){ if(a[i].name=="NijeZivotJedanACM"){ printf("%d",i); return 0; } } return 0; }
- 1
信息
- ID
- 5435
- 时间
- 1000ms
- 内存
- 500MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者