A
#include <bits/stdc++.h>
using namespace std;
//#define int long long
void solve()
{
int n;
cin>>n;
vector<int>a(n);
for(int i=0;i<n;i++)
{
cin>>a[i];
}
int cnt=0;
for(int i=0;i<n;i++)
{
if(a[i]==0) continue;
int j=i;
for (; j<n&&a[j];j++);
i=j;
cnt++;
}
cout<<min(int(2),cnt)<<endl;
return;
}
int main()
{
int tt=1;
cin>>tt;
while(tt -- )
solve();
return 0;
}
B
当字符p在字符s左侧且相交左右侧还留有区域一定无法构造出合法序列 但如果有一个点在字符串最后或第一位是可以的
#include <bits/stdc++.h>
using namespace std;
int t;
int n;
string s;
int main()
{
int T;
cin>>T;
while(T--)
{
cin>>n>>s;
int flag=0;
s=" "+s;
for(int j=1;j<=n;j++)
{
for(int k=1;k<=n;k++)
{
if(s[j]=='p'&&s[k]=='s'&&j!=n&&k!=1) flag=1;
if(s[j]=='s'&&s[k]=='p'&&j!=1&&k!=n) flag=1;
//出现重叠,无解
if(flag==1)
break;
}
if(flag==1) break;
}
if(flag==1) cout<<"NO\n";
else cout<<"YES\n";
flag=0;
}
return 0;
}
C
分类讨论
不考虑x y当n为偶数时考虑01放置即可当n为奇数时01放置但最后一个点设置为2
n为偶数时当考虑x y后相同则将ax=2不同则不变
n为奇数时当x y中存在2时不用变 不存在2时x y不同则无需改变 。需考虑其x y相邻位置是否存在2存在时交换ax ay即可不存在的话只需令ax=2。
#include <bits/stdc++.h>
using namespace std;
int n,x,y;
string s;
int main()
{
int T;
cin>>T;
while(T--)
{
cin>>n>>x>>y;
vector<int>a(n+10);
for(int i=1;i<=n;i++)
{
if(i%2==0)
a[i]=1;
else a[i]=0;
}
if(n%2==0)
{
if(a[x]==a[y])
a[x]=2;
}
else
{
a[n]=2;
if(a[x]!=2&&a[y]!=2)
{
if(a[x]==a[y])
{
if(x==1||y==n-1)
{
if(x==1)
swap(a[x],a[n]);
else swap(a[y],a[n]);
}
else a[x]=2;
}
}
}
for(int i=1;i<=n;i++)
cout<<a[i]<<" ";
cout<<endl;
}
return 0;
}