CodeForces 721B. Passwords(水题,贪心)
2016-10-10 17:25
429 查看
传送门:http://codeforces.com/problemset/problem/721/B
题目大意:
你有一堆不重复单词,其中有一个是你账号的密码。
现在你要按单词长度从小到大逐一尝试,但同长度的单词可以是任意顺序的。
输入一个密码需要1秒,每输错k个密码需要等5秒才能再输。问最少、最多需要多少秒能登录账号?
题目分析:
看到密码的长度不超过100就好办了,采用计数排序,长度小于密码的肯定每个都要尝试一遍,然后最小尝试次数加上1次(试第一个就试对),最大尝试次数是长度等于密码的个数(试到最后一个)。然后再加上输错密码的等待时间,这里有个坑就是要减一再mod k。因为最后一个数肯定是密码,不可能引发等待。
题目大意:
你有一堆不重复单词,其中有一个是你账号的密码。
现在你要按单词长度从小到大逐一尝试,但同长度的单词可以是任意顺序的。
输入一个密码需要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 571B--Minimization(贪心+dp)
- Codeforces 390D Inna and Sweet Matrix(贪心)
- 【CodeForces】597B - Restaurant(贪心)
- [杂题 贪心] Codeforces 808E. Selling Souvenirs
- CodeForces 732D Exams 二分+贪心
- CodeForces 137C【贪心+优先队列】
- 【Codeforces 733D】 Kostya the Sculptor【贪心】
- Codeforces 318 div2.D Bear and Blocks(dp,贪心)
- codeforces--C - Anya and Ghosts(贪心)
- Codeforces 401A Vanya and Card【贪心】水题
- codeforces 500C New Year Book Reading (贪心,很好的思维题)
- 【CodeForces - 849】C From Y to Y 【思维+构造+贪心】
- Codeforces 478C Table Decorations【贪心】【思维】
- codeforces-796C-Bank Hacking(贪心)
- CodeForces 645E Intellectual Inquiry(构造+贪心+dp)
- Codeforces 413C Jeopardy!(贪心)
- 文章标题 codeforces 598F :Gourmet and Banquet(贪心+二分)
- codeforces 337C Quiz(快速幂+推公式+贪心)
- codeforces 324# E. Anton and Ira (暴力枚举+贪心)
- CodeForcesdiv1:995C - Leaving the Bar(随机算法+贪心)