您的位置:首页 > 其它

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

2016-10-10 17:25 429 查看
传送门: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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  codeforces