読者です 読者をやめる 読者になる 読者になる

メモ

yukicoderで遊んでいる競プロゆるふわ勢

yukicoder No.239 にゃんぱすー

問題はこちら
No.239 にゃんぱすー - yukicoder

各文字列を読み込んでstrcrpで"nyanpass"と比較し、各人物が何回"nyanpass"と言っているか調べる
全員に対して"nyanpass"と言えば、その回数はN-1になっているので
そのような人物がちょうど1人いるかどうかを調べる

int main(){
	int a[110]={},i,j,n,f=0;
	char x[40];
	scanf("%d",&n);
	for(i=0;i<n;i++)for(j=1;j<=n;j++){
		scanf("%s",x);
		if(strcmp(x,"nyanpass")==0)a[j]++;
	}
	for(i=1;i<=100;i++)if(a[i]==n-1)f=f?-1:i;
	//fの初期値は0
	//れんちょんっぽい人物を見つけた時
	//他にまだ見つけてなければその人物の番号を、他に見つけていれば-1を格納する
	printf("%d",f?f:-1);
	//fに値が入っていなければれんちょんっぽい人物はいなかったので-1
	return 0;
}

ぎゅっとして配列サイズをごまかして

x[],a[99],i,j,s;
main(n){
	for(scanf("%d",&n);~scanf("%s",x);a[i++%n]+=!strcmp(x,"nyanpass"));
	for(;j<=99;)s=a[j++]+1-n?s:s?-1:j;
	j=!printf("%d",s?:-1);
}

更に今回は答えが100になるテストケースが含まれていないので2つのfor文の終了条件をj<99してよい

//嘘解法
x[],a[99],i,j,s;
main(n){
	for(scanf("%d",&n);~scanf("%s",x);a[i++%n]+=!strcmp(x,"nyanpass"));
	for(;j<99;)s=a[j++]+1-n?s:s?-1:j;
	j=!printf("%d",s?:-1);
}
//答えが100となる任意の入力で落とせる

147B