我喜欢给自己压力,必须得定一个很高的目标,逼自己朝着这个目标前进,不管会不会实现,都是一个动力。 ----喻言
链接:https://ac.nowcoder.com/acm/problem/15405
来源:牛客网
题目描述
愚人节那天,小强很调皮。小强在小娟的一个回文字符串中添加了一个字符。你能帮助小娟找到被添加的是第几个字符吗?
输入描述:
一个只包含小写字母的字符串S。|S| ≤ 500000(|S|表示字符串长度)
输出描述:
输出一个整数K,表示删除第K(从1开始计数)个字符后,S会变成一个回文字符串。 数据保证有解。如果有多个解,输出其中K最小的。
示例1
输入
复制
aaba
输出
复制
1
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <vector>
#include <ctime>
#include <cctype>
#include <bitset>
#include <utility>
#include <sstream>
#include <complex>
#include <iomanip>
#include<climits>//INT_MAX
#define inf 0x3f3f3f3f
#define llinf 0x3f3f3f3f3f3f3f3fll
#define dinf 1000000000000.0
typedef long long ll;
using namespace std;
const int mod=998244353;
const int NM=1e7+10;
string s;
int main(){
cin>>s;
int cd=s.size();
for(int i=0; i<cd; i++) {
string ls=s;
ls.erase(i, 1);
bool fg=true;
for (int j=0; j<ls.size()/2; j++) {
if (ls[j]!=ls[ls.size()-j-1]) {
fg=false;
break;
}
}
if(fg){
cout<<i+1<<endl;
return 0;
}
}
return 0;
}
链接:https://ac.nowcoder.com/acm/problem/15362
来源:牛客网
题目描述
给你一个长度为n且由a和b组成的字符串,你可以删除其中任意的部分(可以不删),使得删除后的子串“变化”次数小于等于m次且最长。
变化:如果a[i]!=a[i+1]则为一次变化。(且新的字符串的首字母必须是'a')
如果初始串全为b,则输出0。
输入描述:
第一行输入两个数n,m。(1 <= n <= 105,0 <= m <= 10)
第二行输入一行长度为n且由a和b组成的字符串
输出描述:
输出一个数字表示最长长度
示例1
输入
复制
8 2 aabbabab
输出
复制
6
说明
原串可以变成aabbbb,只改变了一次,且长度最长。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <vector>
#include <ctime>
#include <cctype>
#include <bitset>
#include <utility>
#include <sstream>
#include <complex>
#include <iomanip>
#include<climits>//INT_MAX
#define inf 0x3f3f3f3f
#define llinf 0x3f3f3f3f3f3f3f3fll
#define dinf 1000000000000.0
typedef long long ll;
using namespace std;
const int mod=998244353;
const int NM=1e7+10;
char s[100100];
int N,M,k,a[20],b[20],jg;
int main()
{
scanf("%d%d%s",&N,&M,s);
while(s[k]=='b')
k++;
for(;k<N;k++)
{
if(s[k]=='a')
a[0]++;
for(int i=1;i<=M;i++)
if(s[k]=='a')
a[i]=max(a[i],b[i-1])+1;
else
b[i]=max(b[i],a[i-1])+1;
}
for(int i=0;i<=M;i++)
jg=max(jg,max(a[i],b[i]));
printf("%d\n",jg);
return 0;
}
链接:https://ac.nowcoder.com/acm/problem/15326
来源:牛客网
题目描述
哲哲有l个球,球是不同的,现在她要用n种颜色给它们染色,如果一种染色方案有k种颜色没有用到,那么哲哲会产生C(k,m)的不满意度。
现在哲哲想求所有方案的不满意度之和,然而她只知道1+1=9,而她的神犇朋友maple去FW战队当中单了不在她身边,所以并不会求,你能帮帮她吗?
输入描述:
三个数n,m,l 1<=n,m<=10^7,l<=10^18
输出描述:
一个数(对998244353取模),表示所有方案的不满意度之和
示例1
输入
复制
3 2 2
输出
复制
3
说明
有以下方案: 两个球同色,有2种颜色没有用到,哲哲产生C(2,2)=1的不满意度,然后这里有三种方案,共产生3的不满意度 两个球不同色,有1种颜色没有用到,哲哲很开心(*^▽^*) 所以总共产生3的不满意度
示例2
输入
复制
1634 1542 130
输出
复制
93812204
说明
无可奉告
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <vector>
#include <ctime>
#include <cctype>
#include <bitset>
#include <utility>
#include <sstream>
#include <complex>
#include <iomanip>
#include<climits>//INT_MAX
#define inf 0x3f3f3f3f
#define llinf 0x3f3f3f3f3f3f3f3fll
#define dinf 1000000000000.0
typedef long long ll;
using namespace std;
const int mod=998244353;
const int N=1e7+10;
ll p[N];
ll ksm(ll a,ll b)
{
ll res=1;
while(b)
{
if(b&1)
res=res*a%mod;
a=a*a%mod;
b>>=1;
}
return res;
}
ll hs(int a,int b)
{
if(a<b)
return 0;
return p[a]*ksm(p[a-b],mod-2)%mod*ksm(p[b],mod-2)%mod;
}
int main()
{
int n,m;
ll l;
p[0]=1;
for(int i=1;i<N;i++)
p[i]=p[i-1]*i%mod;
scanf("%d%d%lld",&n,&m,&l);
printf("%d\n",hs(n,m)%mod*ksm(n-m,l)%mod);
return 0;
}