今天校内第一场排位赛,刚开始我就写这个很水的签到题,自己开始的想法是错的,然后就一直WA,整个心态就崩了。。。。。发现自己还是比较紧张吧,下次排位赛时希望自己放松点,题目本身都很简答。
我开始的想法是26个字符转换为0-25存在hash里面,然后遍历到为hash值为0的地方访问前面最大的值作为这部分的更新次数。等到我回来以后才发现自己想错了。
比如:
abcd分别有4221次,我的方法会认为更新4次结束,实际上是5次。
最大的问题还是心里,当时一心想着这么水我都过不了。下次改正吧。
#include<iostream>
#define inf 0x3f3f3f
#define maxn 3010
using namespace std;
int ans=0,n,A[maxn],j,tmp;
char str;
int main(){
cin>>n;
for(int i=0;i<n;i++) {
cin>>str;
tmp=str-'a';
A[tmp]++;
}
for(int i=0;i<n;i++){
while(A[i]){
A[i]--;
j=i+1;
while(A[j]!=0){
A[j]--;
j++;
}
ans++; //更新次数加一
}
}
cout<<ans<<endl;
return 0;
}