总体还说这场div2还是比较简单的,但是没有多上点分,丧
A. Salem and Sticks
解题思路:暴力题,枚举t判断就行,因为1<=ai<=100。代码如下:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
#include<queue>
#include<stack>
#include<map>
#include<set>
using namespace std;
typedef long long ll;
const ll inf=0x3f3f3f3f;
const int maxn=1e3+5;
int n,a[maxn],b[maxn];
int main(){
std::ios::sync_with_stdio(0);
cin>>n;
for(int i=1;i<=n;++i) cin>>a[i];
int anst,ans=inf;
for(int t=1;t<=110;++t){
int tp=0;
for(int i=1;i<=n;++i){
if(abs(a[i]-t)>1) tp+=abs(a[i]-t)-1;
}
if(tp<ans){
ans=tp;
anst=t;
}
}
cout<<anst<<" "<<ans<<endl;
return 0;
}
B. Zuhair and Strings
解题思路:简单字符串,O(n)跑一遍,如果有k个相同的字母c,那就a[c]++;代码如下:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
#include<queue>
#include<stack>
#include<map>
#include<set>
using namespace std;
typedef long long ll;
const ll inf=0x3f3f3f3f;
const int maxn=1e3+5;
string s;
int a[maxn];
int n,k;
int main(){
std::ios::sync_with_stdio(0);
cin>>n>>k>>s;
for(int i=0;i<(int)s.size();){
int st=i;
char c=s[i];
int j;
for(j=0;j<k;++j){
if(c!=s[st+j]){
break;
}
}
if(j==k) a[c]++;
i=st+j;
}
int ans=0;
for(int i=0;i<maxn;++i){
ans=max(ans,a[i]);
}
cout<<ans<<endl;
return 0;
}