A
#include<bits/stdc++.h>
using namespace std;
#define int long long
void solve()
{
string str;cin>>str;
int ans=0;
if(str[0]=='_')ans++;
if(str.size()==1){
cout<<ans+1<<'\n';
return;
}
int cnt=0;
for(int i=0;i<str.size();i++){
if(str[i]=='_')cnt++;
else {
if(cnt>1)ans+=cnt-1;
cnt=0;
}
}
if(cnt>=1)ans+=cnt;
cout<<ans<<'\n';
}
signed main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int t;cin>>t;
while(t--){
solve();
}
return 0;
}
B
寻找最长的全 1 1 1串,注意首尾的连续 1 1 1可做为一串
#include<bits/stdc++.h>
using namespace std;
#define int long long
void solve()
{
string str;cin>>str;
if(str.size()==1){
if(str[0]=='1')cout<<1<<'\n';
else cout<<0<<'\n';
return;
}
str+=str;
int ans=0;
int cnt=0;
for(int i=0;i<str.size();i++){
if(str[i]=='1')cnt++;
else{
ans=max(ans,cnt);
cnt=0;
}
}
ans=max(ans,cnt);
if(ans==str.size())cout<<(ans/2)*(ans/2)<<'\n';
else if(ans&1)cout<<(ans/2+1)*(ans/2+1)<<'\n';
else cout<<(ans/2+1)*ans/2<<'\n';
}
signed main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int t;cin>>t;
while(t--){
solve();
}
return 0;
}
C
思路就是用 m + 1 m+1 m+1去换掉所有的 m m m,有一些细节需要注意一下就行了
#include<bits/stdc++.h>
using namespace std;
#define int long long
void solve()
{
int n;cin>>n;
vector<int>a(n+1);
a.clear();
map<int,int>mp;
mp.clear();
for(int i=1;i<=n;i++)cin>>a[i],mp[a[i]]=1;
if(n==1){
if(a[1]!=0)cout<<"YES"<<'\n';
else cout<<"NO"<<'\n';
return;
}
int m;
for(int i=0;i<=1e9;i++)if(!mp[i]){m=i;break;}
if(!mp[m+1]){
if(n==m)cout<<"NO"<<'\n';
else cout<<"YES"<<'\n';return;}
int p1,p2;p1=INT_MAX;p2=-1;
for(int i=1;i<=n;i++){
if(a[i]==m+1){
p1=min(p1,i);
p2=max(p2,i);
}
}
mp.clear();
for(int i=1;i<=p1;i++)mp[a[i]]=1;
for(int i=n;i>=p2;i--)mp[a[i]]=1;
for(int i=0;i<m;i++){
if(!mp[i]){
cout<<"NO"<<'\n';
return;
}
}
cout<<"YES"<<'\n';
}
signed main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int t;cin>>t;
while(t--){
solve();
}
return 0;
}