xtuoj 模拟 1176  First Blood

是个菜鸡,写的不好。

算法:边输入边运算(?)

Description
题目描述

ICPC比赛中,某道题的第一次正确提交,被称为First Blood。现给你一个提交的日志文件,请计算出所有题目的First Blood情况。
输入

样例的第一行是一个整数N,表示比赛题目的总数(1≤N≤16)。 以后每行是一条日志信息,包含提交的时间,格式为小时:分钟:秒, 提交队伍号,题目的题号(从1001开始),判题结果。 判题结果为“Accepted”为正确提交,其他都为错误提交。如果有多个队伍同时刻正确提交同一道题,以出现在前的队伍为准。日志信息不是按时间顺序给出。
输出

按题目顺序,每行输出一个题的First Blood情况,包含题号, First Blood的时间,提交的队伍号。如果没人正确提交,则只需要输出题号。
样例输入

3
00:35:10 Team001 1001 Wrong Answer
00:55:20 Team002 1002 Runtime Error
00:56:21 Team003 1002 Time Limit Error
01:06:22 Team001 1001 Accepted
01:26:56 Team002 1001 Accepted
02:08:10 Team003 1001 Wrong Answer
02:10:33 Team003 1001 Accepted
02:20:10 Team001 1002 Time Limit Error
02:40:20 Team003 1003 Accepted
02:42:52 Team002 1002 Accepted
02:50:35 Team003 1002 Runtime Error
02:51:48 Team003 1002 Accepted

样例输出

1001 01:06:22 Team001
1002 02:42:52 Team002
1003 02:40:20 Team003

开始时并没有注意题目没有说一共会输入多少条信息,所以还想着用数组保存所有的数据,排序再比较一下就可以了,还是太天真!
因为没说信息的数量,而且发现这是一个比较的过程,所以经舍友聚聚提点,想到了边输入边比较的算法。

开始写的贼傻,所以看了一下大佬的代码,又简化(学习)了一下

#include<stdio.h>
#include<string.h>
int num1,x,n,i,a[16];
char time[16][10],time1[10],team[16][10],team1[10],sta[16][50],sta1[50];
int main()
{scanf("%d",&n);while(scanf("%s %s %d ",time1,team1,&num1)!=EOF){gets(sta1);x=num1-1001;if('A'==sta1[0] && (a[x]==0 || strcmp(time1,time[x])<0))//是ac且时间小或者是第一次输入 ,用strcmp对ac进行判断也可以啦。{strcpy(time[x],time1);strcpy(team[x],team1);sta[x][0]='A';a[x]=1;}}for(i=0;i<n;i++){if('A'!=sta[i][0])//也可改为if(a[i]==0),也是表达未ac的意思。{printf("%d\n",i+1001);}else{printf("%d ",i+1001);printf("%s ",time[i]);printf("%s\n",team[i]);}}return 0;
} 

总结一下优点:

1.利用strcmp()直接对时间进行比较,因为其对字符的比较和对时间的比较的思路是一样的!都是比较各个字符码的大小。

(而且直接整体对时间,队名等输入,避免了下面gets()会多输入空格的问题)

2.用一个数组a[]表示题目有没有ac,(1表示已ac,0表示未ac)如果未ac就直接赋值,不必比较大小(因为初值是0,是最小的)。而我之前的想法是对时间赋一个非常大的值,这样未ac的时候也可以进行赋值。

以下是贼傻的版本一:

#include<stdio.h>
#include<string.h>
int main()
{int h[16],h1,m[16]={0},m1,s[16]={0},s1,num1,x,n,i;char team[16][10],team1[10],sta[16][50],sta1[50];for(i=0;i<16;i++){h[i]=24;}scanf("%d",&n);while(scanf("%d",&h1)!=EOF){scanf(":%d",&m1);scanf(":%d",&s1);scanf("%s",team1);scanf("%d ",&num1);gets(sta1);/*注意此处不能用scanf,如输入wa,answer会被当成h1输入!
且gets会把字符串前面的空格也输入,所以要在num后加一个空格,保证输入的sta前不含空格,这样才可以比较!!!*/x=num1-1001;if('A'==sta1[0] && (3600*h1+60*m1+s1)<(3600*h[x]+60*m[x]+s[x]))//是ac且时间小{h[x]=h1;m[x]=m1;s[x]=s1;strcpy(team[x],team1);sta[x][0]='A';}}for(i=0;i<n;i++){if('A'!=sta[i][0]){printf("%d\n",i+1001);}else{printf("%d ",i+1001);if(h[i]<10){printf("0%d",h[i]);}else if(h[i]>=10){printf("%d",h[i]);}if(m[i]<10){printf(":0%d",m[i]);}else if(m[i]>=10){printf(":%d",m[i]);}if(s[i]<10){printf(":0%d",s[i]);}else if(s[i]>=10){printf(":%d",s[i]);}printf(" %s\n",team[i]);}}return 0;
}

这是最初的代码,因为不知道如何对时间进行输入输出及计算,就想出的一个很麻烦的方法输出时间。

而且由于是分开输入的时间,导致最后gets(sta1)时第一个字符一直是空格!!!(这个傻子用了好长时间才发现)

xtuoj 模拟 1176 First Blood相关推荐

  1. 计算机操作员考试模拟在线考试,计算机操作员高级问答集考试卷模拟考_试题...

    <计算机操作员高级问答集考试卷模拟考_试题>由会员分享,可在线阅读,更多相关<计算机操作员高级问答集考试卷模拟考_试题(4页珍藏版)>请在人人文库网上搜索. 1.姓名:____ ...

  2. 完全模拟FIFA2014世界杯 原创求顶!

    还沉浸在2014世界杯吗? 快用程序模拟属于自己独一无二的世界杯吧! FIFA2014世界杯模拟器 你值得拥有 // 类 player. team的定义及实现, 代码放到 player_team.cp ...

  3. LightningChart® JS BS端结合框架模拟心电图实例

    简介 用于 .NET 与 Web 的高性能图表控件 官网地址 英文官网地址:https://www.arction.com/ API地址 进入到LightningChart® JS 下的Resourc ...

  4. 蓝桥杯第一次校内模拟赛java题解

    说明一下,一下代码不是官方题解,仅仅只是个人的题解,不一定完全正确,如果有错误,希望大家在评论区指出来. (1) 问题描述在计算机存储中,15.125GB是多少MB? 答案提交这是一道结果填空的题,你 ...

  5. [BZOJ1033][ZJOI2008]杀蚂蚁antbuster(大模拟)

    题目描述 传送门 题解 bz的题面真心不爽,建议去codevs 比较良心的一道大模拟,题面写的比较清楚,也没有什么坑 几个需要注意的地方 1.对于每一只蚂蚁来说,年龄=秒数-1 2.选择方向的过程是: ...

  6. java打架游戏_java模拟游戏打斗场景摘要.doc

    java模拟游戏打斗场景摘要.doc //游戏人物属性模型 package dahuaxiyou; public class Immortal { public String name; public ...

  7. python实现dnf自动刷怪_【python】模拟打怪游戏:怪兽(monster),玩家(hero)

    游戏模式: 假设有怪兽(monster)和英雄(hero)两个角色,二者为敌对状态 假设两个角色初始血量为100,攻击力的伤害服从随机分布(7,17),二者相互攻击,判断谁获胜? # # 定义精灵 c ...

  8. java 模拟一个简单的英雄对战(面向过程练习)

    package Lx; import java.security.Key; import java.util.Random; /** *模拟一个简单的英雄对战(面向过程练习) * */ public ...

  9. bzoj1972 猪国杀 大♂模拟

    链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1972 不要想了这个题面没有办法读的--找个可读版本:https://mubu.com/doc/ ...

最新文章

  1. 通过聚合数据API获取微信精选文章
  2. java 构建是什么意思_构建的概念
  3. 一个n位的数,去掉其中的k位,问怎样去使得留下来的(n-k)位数按原来的前后顺序组成的数最小...
  4. 第二十六期:HTTP 3的前世今生及尝鲜
  5. 马丁 福勒 Martin Fowler 关于依赖注入和反转控制的区别
  6. Mysql中int(M)的含义
  7. 栈溢出笔记1.4 黑掉example_2
  8. 【转载】使用 Google Guava 美化你的 Java 代码
  9. SSM通信研究:如何拦截SSM代理流量
  10. 精品软件介绍 Wireless Network Watcher 中文版 - 防蹭网监视软件
  11. VS2017 CUDA编程学习12:CUDA流
  12. 设有如下定义:char *aa[ ]={abcd,ABCD };则以下说法正确的是 A aa 数组成元素的值分别是abcd和ABCD B aa是指针变量,它指向含有两个数组元
  13. word更新目录页码
  14. 关于阿里云主机数据丢失问题,是常态还是个例?如何保障数据安全?...
  15. 【资源】资源分享(一)
  16. 计算机软著发明,时健
  17. 虚拟化存储和非虚拟化存储
  18. MongoDB单机集群搭建
  19. 2021 第五届“达观杯” 基于大规模预训练模型的风险事件标签识别】3 Bert和Nezha方案
  20. 分布式内存网格Hazelcast源码导读

热门文章

  1. cd src make install make[1]: Entering directory `/home/xuweiliang/redis/r 错误解析
  2. 有理数加法(C语言)
  3. 离散数学(一)——集合
  4. 学子论文:Digg.com:投票的动力因素分析
  5. mysql 授予数据库权限_MySQL:授予**对数据库的所有**权限
  6. 【自学】C语言程序设计
  7. 简述计算机在医院药学工作中的应用,[生物医药论文精品a]计算机在药学工作中的应用...
  8. 2021年安全员-C证考试资料及安全员-C证模拟考试题库
  9. 汇千网-赴港上市升温 忙到日程排不下 港交所“红利期”来了
  10. 力扣算法学习计划打卡:第四天