给你一个只包含A和B的字符串,需要找到任何一个连续字串,使得其中的A和B相同。
暴力找即可,而且只要求其中一个,也不要求最长。
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#define ll long long
#define ull unsigned long long
#define rep(i,a,n) for (int i=a;i<=n;i++)
#define per(i,a,n) for (int i=n;i>=a;i--)
#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
inline ll read()
{
ll x=0,w=1; char ch=0;ch=getchar();
while(ch>'9'||ch<'0'){if(ch=='-')w=-1;ch=getchar();}
while(ch<='9'&&ch>='0'){x=(x<<3)+(x<<1)+(ch-48);ch=getchar();}
return x*w;
}
inline void print(ll x)
{
if(x<0){x=-x;putchar('-');}
if(x>9)print(x/10);
putchar(x%10+48);
}
int n,t;
string str;
void solve()
{
cin>>n;
cin>>str;
int len=str.length();
for(int i=0;i<len;i++)
{
int a=0,b=0;
for(int j=i;j<len;j++)
{
if(str[j]=='a')a++;
if(str[j]=='b')b++;
if(a==b&&a!=0)
{
cout<<i+1<<' '<<j+1<<endl;
return ;
}
}
}
cout<<-1<<' '<<-1<<endl;
}
int main()
{
ios
cin>>t;
while(t--)solve();
return 0;
}
有N个人,每个人都有一种要求
1.不输
2.至少赢一把。
求胜负图。其中+为赢,-为输,X为自己遇到自己,=为平局
统计2要求的人数,我们知道,不可能只有一个人赢而且其他人不输,推理一下也可以知道两个人也不能做到每个人赢一局(因为只有一场比赛不可能两个人都赢)
那么有三个以上要赢的人呢?三个人想要赢,就可以接受自己输了,只需要让每个人都赢一局而且输一局就行了。所以让每个2选项的人都赢自己后面的人,也被前面的人赢。让每个1选项的人都平局,即可。
思路倒是一下就想出来了,代码bug找了半天,发现输赢没清空。这卡了好久,烦死了。
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#define ll long long
#define ull unsigned long long
#define rep(i,a,n) for (int i=a;i<=n;i++)
#define per(i,a,n) for (int i=n;i>=a;i--)
#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
inline ll read()
{
ll x=0,w=1; char ch=0;ch=getchar();
while(ch>'9'||ch<'0'){if(ch=='-')w=-1;ch=getchar();}
while(ch<='9'&&ch>='0'){x=(x<<3)+(x<<1)+(ch-48);ch=getchar();}
return x*w;
}
inline void print(ll x)
{
if(x<0){x=-x;putchar('-');}
if(x>9)print(x/10);
putchar(x%10+48);
}
const int N=1e2+5;
int n,t,cnty,cnte,e[N];
char num[N];
char f[55][55];
void solve()
{
int tope=0;
cin>>n;
cnte=0,cnty=0;
memset(e,0,sizeof(e));
memset(f,0,sizeof(f));
cin>>num+1;
rep(i,1,n)
{
if(num[i]!=0)
num[i]=num[i]-'0';
}
rep(i,1,n)
{
if(num[i]==1)cnty++;
if(num[i]==2)
{
cnte++;
e[++tope]=i;
}
}
if(cnte<=2&&cnte!=0)
{
cout<<"NO"<<endl;
return;
}
else cout<<"YES"<<endl;
if(cnte>2)
{
for(int i=1;i<=tope;i++)
{
if(e[i+1]!=0)
{
f[e[i]][e[i+1]]='+';
f[e[i+1]][e[i]]='-';
}
else
{
f[e[i]][e[1]]='+';
f[e[1]][e[i]]='-';
}
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(f[i][j]==0)
{
f[i][j]='=';
}
}
}
for(int i=1;i<=n;i++)
{
f[i][i]='X';
}
rep(i,1,n)
{
rep(j,1,n)
{
cout<<f[i][j];
}cout<<endl;
}
}
int main()
{
ios
cin>>t;
while(t--)
{
solve();
}
return 0;
}
这题是题目没读懂。
有n个人,每个人有An个任务要说,如果一个人没有要说的东西了,他的发言将会被跳过,如果有一个合理的顺序,让一个人不会发言两次,这个发言顺序就叫做好顺序,统计好顺序的数量,对998244353取模。
如果有多个最大的数,明显发言顺序不会影响方案数,结果是
如果最大的数和次大的数差距大于1,那么很明显,没有好顺序。输出0;
如果最大的数和次大的数差距为1,那么最大的数一定要在次大的数前面。我们可以用插空法。
以样例最后一项为例
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#define ll long long
#define ull unsigned long long
#define rep(i,a,n) for (int i=a;i<=n;i++)
#define per(i,a,n) for (int i=n;i>=a;i--)
#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
inline ll read()
{
ll x=0,w=1; char ch=0;ch=getchar();
while(ch>'9'||ch<'0'){if(ch=='-')w=-1;ch=getchar();}
while(ch<='9'&&ch>='0'){x=(x<<3)+(x<<1)+(ch-48);ch=getchar();}
return x*w;
}
inline void print(ll x)
{
if(x<0){x=-x;putchar('-');}
if(x>9)print(x/10);
putchar(x%10+48);
}
const int N=2e5+5 , mod=998244353;
int t,n,num[N];
void solve()
{
cin>>n;
rep(i,1,n)cin>>num[i];
int maxn=-1,dmaxn=-1;
rep(i,1,n)
{
if(num[i]>maxn)
{
dmaxn=maxn;
maxn=num[i];
}
else if(num[i]>dmaxn)
{
dmaxn=num[i];
}
}
if(maxn==dmaxn)
{
ll tmp=1;
for(int i=1;i<=n;i++)
{
tmp=(tmp*i)%mod;
}
cout<<tmp<<endl;
return;
}
else if(maxn-dmaxn>1)
{
cout<<"0"<<endl;
return;
}
else
{
int cntd=0;
for(int i=1;i<=n;i++)
{
if(num[i]==dmaxn)cntd++;
}
ll tmp=1;
for(int i=2;i<=cntd;i++)
{
tmp*=i;
tmp%=mod;
}
tmp*=cntd;
tmp%=mod;
for(int i=cntd+2;i<=n;i++)
{
tmp*=i;
tmp%=mod;
}
cout<<tmp<<endl;
return ;
}
cout<<"b"<<endl;
}
int main()
{
ios
cin>>t;
while(t--)solve();
return 0;
}