問題はこちら
No.587 七対子 - yukicoder
各文字が何個あるかを数える。
ちょうど2個ある文字がちょうど6種類あるとき、その時に限り、残りの1種類と同じ文字を加えることで7ペアにできる
a[999],ans,c,i; main(){ for(i=0;i<13;i++)a[getchar()]++; for(i='a';i<='z';i++){ if(a[i]==2)c++; if(a[i]==1)ans=i; } if(t==6)printf("%c",x); else printf("Impossible"); }
2つのfor文のindexの範囲が被っていないので、そのまま合体させることができる
a[999],t,x; main(i){ for(;i<128;a[++i]==1?x=i:0)a[getchar(t+=a[i]==2)]++; printf(t-6?"Impossible":"%c",x); }
104B
別方針も考えたが110Bにしかならず
a[999],s,t; main(x){ for(;(x=getchar())-10;s+=1<<4/++a[x])t^=1<<x; printf(s-136?"Impossible":"%c",x=log2(t)+96); } //s+=++a[x]==2 //aabbccddeefffで死ぬ //s+=2/a[x] //1+1=2+0なのでaabbccdd eeefghで死ぬ //s+=1<<2/a[x] //2+2+2=4+1+1なのでaabbcc ddddefghで死ぬ
2018/01/25追記
aが余っているのでxの代わりにつかうことができる。またそれにより出力がputsでよくなるため大幅に短縮できる。
それから自明な1Bの短縮を合わせて計9B短縮
a[999],t; main(i){ for(;i<128;a[++i]&1?*a=i:0)a[getchar(t+=a[i]==2)]++; puts(t-6?"Impossible":a); }
95B