传送门:B. Passwords
描述:
题意:
输入密码按长度非递减顺序输入,每输一次密码耗时1秒,输错k次等待5秒,最后一行为正确密码,问消耗的最少和最多时间。
思路:
对密码长度进行桶排序,算出比正确密码长度短的密码个数,最少时间为下次输入即正确,最多为该长度最后输入才正确
代码一:
#include <bits/stdc++.h>
#define pr(x) cout << #x << "= " << x << " " ;
#define pl(x) cout << #x << "= " << x << endl;
#define ll __int64
using namespace std;
template<class T> void read(T&num) {
char CH; bool F=false;
for(CH=getchar();CH<'0'||CH>'9';F= CH=='-',CH=getchar());
for(num=0;CH>='0'&&CH<='9';num=num*10+CH-'0',CH=getchar());
F && (num=-num);
}
int cnt[105];//长度为i有多少个
string s;
int n,k;
int main(){
read(n);read(k);
for(int i=1; i<=n; i++){
cin>>s;
cnt[s.size()]++;
}
cin>>s;
int len=s.size();
int mn=0,mx=0;
for(int i=1; i<=len; i++){
if(i==len){
mn+=1;
mx+=cnt[i];
}else{
mn+=cnt[i];
mx+=cnt[i];
}
}
mn+=(mn-1)/k*5;mx+=(mx-1)/k*5;
cout<<mn<<' '<<mx<<endl;
return 0;
}
代码二:
(自己的丑代码,要有敢于批判自己的精神_(:зゝ∠)_)
#include <bits/stdc++.h>
#define pr(x) cout << #x << "= " << x << " " ;
#define pl(x) cout << #x << "= " << x << endl;
#define ll __int64
using namespace std;
template<class T> void read(T&num) {
char CH; bool F=false;
for(CH=getchar();CH<'0'||CH>'9';F= CH=='-',CH=getchar());
for(num=0;CH>='0'&&CH<='9';num=num*10+CH-'0',CH=getchar());
F && (num=-num);
}
int cnt[105];//长度为i有多少个
string s;
int n,k;
int main(){
/* std::ios::sync_with_stdio(false);
std::cin.tie(0);
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
#endif*/
read(n);read(k);
for(int i=1; i<=n; i++){
cin>>s;
cnt[s.size()]++;
}
cin>>s;
int len=s.size();
int tmp,sum=0;
for(int i=1; i<len; i++){//先处理长度小的
if(cnt[i]==0)continue;
sum+=cnt[i];
}
int ans=0;
tmp=sum%k;//多下来的不能达到k的
ans+=((sum-tmp)+5*(sum/k));
int mn=0,mx=0;
mn+=(ans+tmp+1);
sum=(tmp+cnt[len]);
mx+=ans+sum+(5*((sum-1)/k));
cout<<mn<<' '<<mx<<endl;
return 0;
}