首页 > 其他 > 详细

Key Knocking

时间:2020-11-22 09:36:44      阅读:23      评论:0      收藏:0      [点我收藏+]

题意:给定一个长度为3n的01串,串的价值为0块的个数和1块的个数和,比如010的价值为3,0010的价值也为3,01010的价值为5,你可以进行一种操作,把相邻俩个元素从0变成1或者从1变成0,要在n次操作内使串的价值达到2n或以上,输出操作数和每个操作的左边位置
题目链接

#include<stdio.h>
#include<string.h>
char s[300100];
int a[300100];
int ans[100100];
void change(int now){
	if(a[now]==0)a[now]=1;
	else a[now]=0;
}
int main(){
	scanf("%s",s+1);
	int cnt=strlen(s+1);
	int cnta=0;
	for(int i=1;i<=cnt;i++)a[i]=s[i]-‘0‘;
	for(int i=1;i<=cnt;i=i+3){
		if(a[i]==0&&a[i+1]==1&&a[i+2]==0)continue;
		if(a[i]==1&&a[i+1]==0&&a[i+2]==1)continue;
		if(a[i]==a[i+1]&&a[i+1]==a[i+2]){
			if((a[i-1]^a[i])==0){
				ans[++cnta]=i;
				change(i);
				change(i+1);
			}
			else{
				ans[++cnta]=i+1;
				change(i+1);
				change(i+2);
			}
		}
		else{
			if(a[i]!=a[i+1]){
				ans[++cnta]=i;
				change(i);
				change(i+1);
			}
			else{
				ans[++cnta]=i+1;
				change(i+1);
				change(i+2);
			}
		}
	}
	printf("%d\n",cnta);
	for(int i=1;i<=cnta;i++){
		printf("%d",ans[i]);
		if(i==cnta)printf("\n");
		else printf(" ");
	}
}

Key Knocking

原文:https://www.cnblogs.com/League-of-cryer/p/14017913.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!