2013-02-12
■ 2013 JJMO 4番
図を書くのが大変でぐちゃぐちゃになってしまったので、本番では完答できませんでした。
AC上に、CK=CSとなる点Sをとる。すると仮定よりAS=AJとなる。
Iは内心なので、∠KCI=∠SCI、∠SAI=∠JAIである。よって2辺夾角相等なので△CIKと△CIS、△AISと△AIJは合同。
ここで∠IKC=θとすると、∠IKC=∠ISC=180-∠ASI=180-∠AJI=∠BJI=θである。
よって、4点B,J,I,Kにおいて∠BJI=∠DKIなので同一円周上にある。
そして、AからBCにおろした垂線の足をDとすると仮定より∠HDK=90=∠HIKなので、4点H,I,D,Kは同一円周上にある。
よって、∠BJI=∠DKI=∠DHI=θ、つまり∠BJI=∠DHI=θである。(本番はここまで書いた。)
すなわち、∠AJI=180-θ=180-∠DHI=∠AHIが成り立ち、4点A,J,H,Iは同一円周上にある。
よって∠HJI=∠HAI=90-(180-∠BAC/2-∠ABC)=(∠ABC-∠ACB)/2、∠IJK=∠IBK=∠ABC/2
求める解は∠HJK=∠IJK-∠IJH=∠ACB/2である。
部分点もらえるといいなあ><
■ JOI本選参加記
結果から言うと、100+70+0+0+0=170でBランクでした。
10点差で合宿を逃したことを考えると悔しさも残りますが
「これが今の実力」と思いあきらめがつきました。
(時系列に書いていきます。)
2/9
荷物が思いの外重かったので、両親に来てもらいました。12:30頃に行くと思う、と言ったのに、
12:00頃には学校をおいだされた^^; 高校入試の前日だから仕方ないね。
昼食を取り、車内で寝ました。3:10頃に会場入り。
なんか盾をもらった。うれしい
プラクティスは5完した。明日もこんな感じに順調に行くといいなあ、と思った。
ICカードについての講演は、競技と開発のプログラミングの違いを感じた。
部屋は夏季セミの部屋/4で、狭かった。枕だけカバーをつけた。シーツとかたたむのたいへん。
夕食ではコミュ障全開だったような。
でも、話しかけてくださったり、名刺交換の場に入れていただけてうれしかったです。
ありがとうございました。
風呂は開成の同級生と後輩とはいって、いろいろと話した。
その後は、電子機器を充電したりコーディングしたり蟻本読んだり談話室にいってコミュ障全開したり。
12:00頃に寝た。
2/10
7:00に目覚ましで起きることに成功。7:30まで布団にこもっていた後、起きていろいろと準備する。
朝食を消化して試験会場入り。
5分開始が遅れたりした。
overview sheetに1~3が完全フィードバックとあったのでこの3問をとこうときめる。
そしていよいよはじまる。
1.
えっむずい。。。となるも、隣り合っているライトで同じ状態にあるものの場所をvectorに格納して、
3つ離れた最大値をとればいいことに気づく。26分くらいで1発AC。この頃は幸せだった。。。
#include#include #include using namespace std; #define pb push_back int n; int num[100005]; vector<int>vec; int main(){ scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&num[i]); } for(int i=1;i if(num[i]==num[i+1]){ vec.pb(i); } } if(vec.size()<=2){ printf("%d\n",n); }else{ int ans=0; ans=vec[2]; for(int i=3;i 3],ans); } ans=max(ans,n-vec[vec.size()-3]); printf("%d\n",ans); } return 0; }
2.
dpだー 書く。サンプル通る。 投げる。
o 52 x 2 (50) 何で半分しか点が来ない!? あとx 2って何???
どつぼりました。 結局50点を超えないままあきらめる。
3.
分からん。やばいなあ。
4,5. 分かるわけない。
となったので2に復帰。 終了30分前に70点になったので、切り上げる。
そのときのコード
#include#include #include #include using namespace std; int dp[2005][2005][2]={}; int main(){ int s,t; string S,T; scanf("%d %d",&s,&t); cin >> S; cin >> T; for(int i=0;i if(S[i]=='I'){ dp[i+1][0][0]=1; break; } } for(int i=0;iif(S[i]=='O'){ dp[i+1][0][1]=1; break; } } for(int j=0;jif(T[j]=='I'){ dp[0][j+1][0]=1; break; } } for(int j=0;j if(T[j]=='O'){ dp[0][j+1][1]=1; break; } } for(int j=1;j<=t;j++){ for(int i=1;i<=s;i++){ if(S[i-1]=='I'){ if(dp[i-1][j][1]%2==0) dp[i][j][0]=max(dp[i][j][0],dp[i-1][j][1]+1); dp[i][j][0]=max(dp[i][j][0],dp[i-1][j][0]); }else{ if(dp[i-1][j][0]%2==1) dp[i][j][1]=max(dp[i][j][1],dp[i-1][j][0]+1); dp[i][j][1]=max(dp[i][j][1],dp[i-1][j][1]); } if(T[j-1]=='I'){ if(dp[i][j-1][1]%2==0) dp[i][j][0]=max(dp[i][j][0],dp[i][j-1][1]+1); dp[i][j][0]=max(dp[i][j][0],dp[i][j-1][0]); }else{ if(dp[i][j-1][0]%2==1) dp[i][j][1]=max(dp[i][j][1],dp[i][j-1][0]+1); dp[i][j][1]=max(dp[i][j][1],dp[i][j-1][1]); } } } int ans=0; for(int i=1;i<=s;i++){ for(int j=1;j<=t;j++){ if(dp[i][j][0]%2==1){ ans=max(ans,dp[i][j][0]); } } } printf("%d\n",ans); return 0; }
3. dijkstraだった。と気づいた時には実装する時間は残されていなかった。
~~~~~終了~~~~~
死。
前の席のryo_issyさんが300点に届かなかったらしい。ということはかなり難しかったようだ。
DEGwerさんに話しかけてもらった。死んだとは言っても(自分から見れば)いい点なのでさすがだなあと思った。
開成の同級生と後輩が200点台だったらしい。
昼食。かなしい。
解説。かなしい。
4,5番がとてもいい問題だったんだ、と知った。
tozangezan先輩、semiexp先輩、Hujiwara先輩などがきてくださっていた。
170点でも希望がある、という趣旨のことを言っていただきうれしかった。ありがとうございました。
翌日のJJMOに備えてホテルに向かった。応援してくださった人たちと両親に申し訳なくて涙が出た。
とにかくJJMOは頑張ろうときもちを入れ替えて、寝た。
JJMOは実力を出せたと思うので、うれしい。
参加記は以上です。
一つ思ったのは、今回のJOIは、自分のような初心者だけではなく、
touyouさん、satashunさん、igrskさん、kevinrobot34さんなどの実力者が
落とされているような波乱があったことです。
自分が言えたことではないですが、実力者が落ちてしまうのは残念なことだと思います。
自分自身は何より、本番で力を出し切ることの難しさを痛感しました。
この経験を生かさないと未来はないと思います。成功も失敗も経験を積んで、実力をもっともっとつけて、
来年は本選を通って、あわよくばIOIを狙えるようなレベルになりたいとおもっています。
最後に、合宿に行く皆さんは精進して、悔いの残らないように全力をつくし、IOI代表を目指してください!!
微力ながら応援してます!!
ここまで読んでくださって、ありがとうございました!!