A. Marin and Photoshoot
只需要判断插入数组1的情况
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<malloc.h>
int main()
{
int tt;scanf("%d",&tt);
char x[110];
while(tt--){
int n;scanf("%d",&n);getchar();
gets(x);
int end=0;
for(int i=1;i<n-1;i++){
if(x[i]=='0'&&x[i-1]=='0'&&x[i+1]=='0'){
end+=4;x[i]='1';
}
else if(x[i]=='1'&&x[i-1]=='0'&&x[i+1]=='0'){
end+=1;
}
else if(x[i]=='0'&&x[i-1]=='0'){
end+=2;x[i-1]='1';
}
}
if(x[n-1]=='0'&&x[n-2]=='0') end+=2;
printf("%d\n",end);
}
return 0;
}
B. Marin and Anti-coprime Permutation
奇数无解,偶数 求全排列的平方
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<malloc.h>
int main()
{
long long int num[1010]={0};
int zs[1010]={0};
for(int i=2;i<1010;i+=2){
{
int o=i/2;
int j=i-o;
long long int end=1;
for(int kk=2;kk<=o;kk++) {
end*=kk*kk;
end%=998244353;
}
num[i]=end;
}
}
int tt;scanf("%d",&tt);
while(tt--){
int sb;scanf("%d",&sb);
printf("%lld\n",num[sb]);
}
return 0;
}
C. Shinju and the Lost Permutation
给出的一个数列是指每次操作后严格递增值的数量
每次将可能操作的数组的最后一位移到前面时最多让新数组“严格递增值的数量 ”+1,
比如 3 4 6 5 2 1 得到的是 3 4 6 6 6 6,值为3
最后一位前移之后,得到 1 3 4 6 5 2 ,变成1 3 4 6 6 6,值为4
不可能增加数量超过1,减少可以随便
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<malloc.h>
int main()
{
int sb[200005]={0};
int tt;scanf("%d",&tt);
while(tt--){
int n;scanf("%d",&n);
if(n==1){
scanf("%d",&n);
printf("YES\n");
continue;
}
int startid=0,llip=0;
for(int i=1;i<=n;i++){
scanf("%d",&sb[i]);
if(sb[i]==1) llip++;
if(startid==0){
if(sb[i]==1) startid=i;
else sb[i+n]=sb[i];
}
}
if(llip>1){
printf("NO\n");
continue;
}
int fk=0;
for(int i=1;i<n;i++){
if(sb[i+startid]-sb[i+startid-1]>1){
fk=1;break;
}
}
if(fk) printf("NO\n");
else printf("YES\n");
}
return 0;
}