sicau OJ (川农牛,是学生)题目,附java AC代码

川农牛,是学生
 
这是四川农业大学OJ上的一道题目,AC率较低,这里给出我的代码,供大家交流学习。

 

描述

 

对于川农牛的真实身份,目前已经有了114514114514种说法。

其中有一种说法已经得到了许多人认同,说他是四川农业大学信息工程学院的一名学生。

随着毕业临近,川农牛也在魔都找到了一份 SoftwareEngineer 工作,就职于某404404公司。

当列车停稳在陆家嘴站,川农牛背着双肩背包挤出二号线,又是一个萧瑟的秋天。在上海环球金融中心大厦的高速电梯里,川农牛的格子衬衫在其他西装革履的金融从业者映衬下十分显眼。电梯到了60F川农牛就牛不停蹄的跑去开上午的组会。

会上Boss说:我们404公司向来注重用户隐私安全,为了提升VIP用户帐号的安全性,404404公司决定实施一项措施:

对在1小时内(注:00:00:00与01:00:00仍视为在1小时内)出现66次或66次以上密码错误的VIP账户,暂时禁止该帐号被登录。而对普通账户不作处理。

这个Boss是川农牛一直敬仰的技术大牛,当初也是他内推自己进的404404公司。为了给技术大牛留下好印象,川农牛自高奋勇的来解决这个需求。

现在川农牛拿到了某日全部密码错误的日志,他想知道有哪些帐号被暂时禁止登录。川农牛坚信JAVA是最优秀的编程语言,因此自己只会用JAVA来写。在巨大的落地窗前,面对着繁忙的黄浦江,川农牛开始CodingCoding,吃的是草,挤出的是代码,他是一个想用代码征服上海滩的牛?

 

输入

 

第一行包含一个整数NN,代表记录的行数。

以下NN行每行包含一个字符串SS和一个时间TT。其中是SS代表密码错误的账号IDID;TT代表发生登陆错误时间,格式是hh:mm:ss。

1N≤10^5

字符串长度不超过10位由阿拉伯数字和小写字母组成,其中字母s打头的代表是VIP用户

00:00:00T23:59:59

 

输出

 

按照字典序从小到大输出所有被禁止登录的VIP帐号IDID,每个一行。

 

输入样例 1 

11
s1000 00:00:00
s1001 00:59:00
s1001 00:58:00
s1001 01:00:00
s1000 01:00:00
s1000 02:00:00
s1000 03:00:00
s1001 01:00:01
s1001 01:00:01
s1000 04:00:00
s1001 01:23:14

输出样例 1

s1001

提示

请使用Main作为类名,删除package语句

Hash table

Map

请复习Java集合类,可以与同学交流讨论思路,但要独立编写代码。

使用学号账号完成,使用其他账号无效。

本题共十个测试点,数据量从小到大,每个测试点10分。

 

解题思路:

首先采用hashMap,键值对的方式对输入的数据进行存储。键就是vip的名字,值是一个动态数组 ArrayList, 里面存放的是一条条错误日志的时间,换算成秒来保存,方便后面计算一个小时(即3600秒)内是否存在六条即以上的错误日志。存储好以后,后面的步骤就比较简单了。具体看下面的代码。

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;
import java.util.*;

/**
 * shiyan3
 * create by chenshihang on 2018/11/2
 */
public class shiyan3 {



    public static boolean isBanThisVip(List<Integer> timeList){
        boolean flag = false;
        int size = timeList.size();
        if(size<6){
            return flag;
        }
        Collections.sort(timeList, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1-o2;
            }
        });
        for(int i=0;i<=size-6;i++){
            if(timeList.get(i+5)-timeList.get(i) <= 3600){
                flag = true;
                break;
            }
        }
        return flag;
    }


    public static void main(String[] args) throws IOException {



        StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
        in.nextToken();
        int n = (int)in.nval;
        Map<String,List<Integer>> infos = new HashMap<>();
        for(int i=0;i<n;i++){
            in.nextToken();
            String name = in.sval;
            in.nextToken();
            int h = (int)in.nval;
            in.nextToken();
            in.nextToken();
            int m = (int)in.nval;
            in.nextToken();
            in.nextToken();
            int s = (int)in.nval;

            if(name==null ||name.charAt(0)!='s'){
                continue;
            }else {
                List<Integer> timeList = infos.get(name);
                if(timeList == null){
                    timeList = new ArrayList<>();
                }
                timeList.add(h*60*60+m*60+s);
                infos.put(name,timeList);
            }
        }

        Set<String> nameSet = infos.keySet();
        List<String> names = new ArrayList<>();
        for(String name:nameSet){
            if(isBanThisVip(infos.get(name))){
                names.add(name);
            }
        }

        String[] result = new String[names.size()];
        result = names.toArray(result);
        Arrays.sort(result);
        for(String item:result){
            System.out.println(item);
        }

    }

}

  

转载于:https://www.cnblogs.com/cavinchen/p/9945820.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值