A题:https://codeforces.com/contest/1265/problem/A
题意:这道题的话,是给你n串字符串,每串字符串都是由"a","b","c","?"组成。然后告诉你每个相邻的字母如果是不同的,那么这个字符串便是好串。让你把每串字符串中的"?"改成"a","b","c"中的任意一个。问你这个字符串是不是好串。如果是的话,输出字符串;如果不是的话,输出-1。
思路:思路的话,就是把"?"替换成"a","b","c";很简单,看代码就知道了。
AC代码:
#include <bits/stdc++.h>
typedef long long ll;
const int maxx=1010;
const int inf=0x3f3f3f3f;
using namespace std;
string s;
string x="abc";
void solve()
{
cin>>s;
for(int i=0; i<s.size(); i++)
{
for(int j=0; j<3; j++)
{
if(s[i]=='?')
{
if(i>0 && s[i-1]==x[j])
continue;
if(i+1<s.size() && s[i+1]==x[j])
continue;
s[i]=x[j];
}
}
}
for(int i=0; i<s.size(); i++)
{
if(s[i]==s[i+1])
{
cout<<"-1"<<endl;
return ;
}
}
cout<<s<<endl;
}
int main()
{
int n;
cin>>n;
while(n--)
{
solve();
}
return 0;
}
B题:https://codeforces.com/contest/1265/problem/B
题意:这道题的话,题意就是给你一串序列,问你当m从1开始增大的时候能不能实现有一个区间满足是从1~m的每一个数,如果满足的话,就输出1,不满足就输出0。
思路:思路的话就是设立一个l和一个r作为序列的左右边界,然后,因为序列的第一个数总满足,所以第一个就先输出一个"1"。
然后再一一进行遍历,若能找到就输出"1",找不到就输出"0"。
AC代码:
#include <bits/stdc++.h>
typedef long long ll;
const int maxx=200010;
const int inf=0x3f3f3f3f;
using namespace std;
int a[maxx],b[maxx];
int main()
{
int t,n;
cin>>t;
while(t--)
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
b[a[i]]=i;
}
int l=b[1],r=b[1];
cout<<"1";
for(int i=2;i<=n;i++)
{
l=min(l,b[i]);
r=max(r,b[i]);
if(r-l+1==i)
cout<<"1";
else
cout<<"0";
}
cout<<endl;
}
return 0;
}
C题:https://codeforces.com/contest/1265/problem/C
扫描二维码关注公众号,回复:
8682676 查看本文章
题意:这道题的话,题意是进行了一场icpc的比赛,然后要你进行颁奖。颁奖的时候要注意金牌的题数要严格大于银牌的题数;银牌的题数要严格大于铜牌的题数;铜牌的题数要严格大于未获奖的题数。同时还要注意,金银铜牌数不能超过比赛人数的一半。
思路:思路的话,就是贪心的思想,因为奖牌总数不能超过一般人数,所以我们可以让金牌和银牌的人数尽可能的少,
然后剩下的都是铜牌,这样就可以满足题里的要求。
AC代码:
#include <bits/stdc++.h>
const int maxn=400010;
const int inf=0x3f3f3f3f;
using namespace std;
int a[maxn];
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
for(int i=1; i<=n; i++)
cin>>a[i];
int g=0,s=0,d=0,x=0;
for(int i=1; i<=n/2; i++)
{
if(a[i]!=a[i+1])
{
x=i;
break;
}
}
g=x;
int k=a[g+1];
for(int i=x+2; i<=n/2; i++)
{
if(a[i]!=k && i-g-1>g)
{
s=i-g-1;
x=i;
break;
}
else if(a[i]!=k && i-g-1<=g)
{
k=a[i];
}
}
for(int i=n/2+1; i>=x; i--)
{
if(a[i]!=a[i-1])
{
d=i-x;
break;
}
}
if(g>=s || g>=d || g+s+d>n/2)
cout<<"0 0 0"<<endl;
else
cout<<g<<" "<<s<<" "<<d<<endl;
}
return 0;
}