メモ

yukicoderでゆるふわgolf

yukicoder No.345 最小チワワ問題

問題はこちら
No.345 最小チワワ問題 - yukicoder

cを見つける毎にその後ろにwを2つ探して、その長さを調べていけば良い

int main(){
	int i,j,m=1000,t;
	//存在すれば最小値は必ず100以下
	char s[110];
	gets(s);
	for(i=0;s[i];i++){
		if(s[i]!='c')continue;
		//'c'を探す
		t=0;
		for(j=i+1;s[j];j++){
			//wが2個見つかるか末尾に来るまで探す
			if(s[j]=='w')t++;
			if(t==2)break;
		}
		if(t==2){
			//wを2個見つけたなら長さを求めて値を更新
			j=j-i+1;
			if(j<m)m=j;
		}
	}
	printf("%d",m==1000?-1:m);
	return 0;
}

とりあえず縮めやすくする

i,j,m,t;
char s[110];
main(){
	for(gets(s);s[i];i++){
		for(t=2,j=i;s[i]=='c'&&t&&s[j];j++)t-=s[j]=='w';
		if(!t){
			j-=i-2;
			//先ほどより1大きな値を保存することにした
			!m|j<m?m=j:0;
		}
	}
	m=!printf("%d",m-1);
	//mの初期値は0なので、見つからなければ-1が出力される
}

で縮める

char s[99];
i,m,t;
main(j){
	for(gets(s);s[j=i];j-=i++-2,!t&&!m|m>j?m=j:0)for(t=2;s[i]==99&&t&&s[++j];t-=s[j]=='w');
	i=!printf("%d",m-1);
}

133B