0
点赞
收藏
分享

微信扫一扫

Codeforces Round #779 (Div. 2) A-C

you的日常 2022-03-30 阅读 65
c语言

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;
}
 

举报

相关推荐

0 条评论