HIR180's diary

ICPC World Finals 2022 を集大成に

2013-02-12

2013 JJMO 4番 21:41

図を書くのが大変でぐちゃぐちゃになってしまったので、本番では完答できませんでした。

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本選参加記 04:46

結果から言うと、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;iif(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;i3],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;iif(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;jif(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代表を目指してください!!

微力ながら応援してます!!

ここまで読んでくださって、ありがとうございました!!