C-小红的字符串构造_牛客周赛 Round 38 (nowcoder.com)
小红希望你构造一个长度为nnn的、仅包含小写字母的字符串,其中恰好有kkk个长度大于1的回文子串。你能帮帮她吗?
自己构造回文,如果要求包含3个回文,则来个abc再翻转复制,abccba,要求保证后面没有回文,再来个xzyxzyxzy,这样长度为3的字符串重复出现不翻转就可以
我们发现对于一个不是回文子串,至少需要3个不同的字符,如abcabc,永远不存在回文子串
#include<bits/stdc++.h>
using namespace std;
string s1="xzy";
string s2="abc";
int main()
{
int n,k;
cin>>n>>k;
string s="";
for(int i=0;i<k;i++)
{
s+=(s1[i%3]);
}
for(int i=k-1;i>=0;i--)
{
s+=s[i];//反转复制
}
for(int i=2*k;i<n;i++)
{
s+=s2[i%3];
}
cout<<s;
return 0;
}
B-小红的抛弃后缀_牛客周赛 Round 38 (nowcoder.com)
对于题目这么大的数,用字符组存,为9倍数的规律是各个位的数相加为9所以把总和算粗来,从后面一个个减去就可以咯
#include<bits/stdc++.h>
using namespace std;
const int N=100005;
char a[N];
int main()
{
cin>>a;
int n=strlen(a);
int sum=0,ans=0;
for(int i=0;i<n;i++)
{
sum+=(a[i]-'0');
}
//cout<<sum<<endl;
if(sum%9==0) ans++;
for(int i=n-1;i>=0;i--)
{
int x=a[i]-'0';
//cout<<x<<endl;
sum=sum-x;
//cout<<sum<<endl;
if(sum%9==0&&sum!=0)
{
ans++;
}
}
cout<<ans<<endl;
return 0;
}
考数学的一道题