CodeForces 721B. Passwords(水题,贪心)

传送门:http://codeforces.com/problemset/problem/721/B

题目大意:
你有一堆不重复单词,其中有一个是你账号的密码。
现在你要按单词长度从小到大逐一尝试,但同长度的单词可以是任意顺序的。
输入一个密码需要1秒,每输错k个密码需要等5秒才能再输。问最少、最多需要多少秒能登录账号?

题目分析:
看到密码的长度不超过100就好办了,采用计数排序,长度小于密码的肯定每个都要尝试一遍,然后最小尝试次数加上1次(试第一个就试对),最大尝试次数是长度等于密码的个数(试到最后一个)。然后再加上输错密码的等待时间,这里有个坑就是要减一再mod k。因为最后一个数肯定是密码,不可能引发等待。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,k;
string p[105];
string password;
int len[105];
int main() {
    memset(len,0,sizeof(len));
    scanf("%d %d\n",&n,&k);
    for(int i=0;i<n;i++) {
        cin>>p[i];
        len[p[i].length()]++;
    }

    cin>>password;
    int passLength = password.length();

    int cnt=0;
    for(int i=1;i<passLength;i++)
        cnt+=len[i];

    int minTimes=cnt+1 , maxTimes = cnt+len[passLength];
    int minSec = minTimes + (minTimes-1)/k*5,maxSec = maxTimes+(maxTimes-1)/k*5;
    printf("%d %d\n", minSec,maxSec);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值