ICPC2010日本国内予選

まだ参加資格はないけれど、問題をリアルタイムで解いてみました。
A, B, Cの三問解きましたが、Sample Inputに対して正しく答えを出力しただけなので
実際のテストケースで落ちる可能性は十分あります。

Problem A

さくっと実装。
所要時間:10分

Problem B

迷路探索。実装ゲーだった気がします。
バグに嵌って時間を費やしてしまった。
所要時間:35分

Problem C

動的計画法
最初に全部計算してO(n^(4/3)+テストケース数)くらいになりました。
問題の意味を誤解してたので無駄に時間を食ってしまった。
所要時間:20分

Problem D

最初問題の意味が分からん&実装が重そうだったので飛ばしました。
競技時間終了前-5分頃に問題の意味を理解しました。

Problem E

グラフ。この問題に最後まで取り組んでいたけど出来ませんでした。
最初にゴールドにたどり着けないノードを深さ優先で計算しておいて、スターから「現在のノードから行けるノードの中でゴールドにたどり着けないノード以外で文字列が一番辞書順で早いものを辿る」という形で深さ優先すればいける気がしましたが、閉路の扱いと「辞書順で早いけど接頭辞になってるだけ」の形に困りました。うーん。少なくとも紙とペンを用意して置くべきだった…。

Problem F

Problem G

問題だけ見ましたが難しそうですね。
それぞれ編集距離(たぶん)と幾何です。

けつろん

仮に全部テストケースを通過したとして3問ACなので、アジア地区予選に進めるかと言われたら難しそうなところですね。
来年からICPCを選手として受けることになりそうですが、その時は3人居るので、いい結果が残せたらいいなと思います。
ICPCに参加されたみなさんお疲れ様でした。

APIO2010

2010年5月8日(土)にAPIO(アジア太平洋情報オリンピック)という大会がありました。
3問/5時間。
問題とか結果とかは http://www.apio2010.org/apioweb/index.jsp から。


結果:死 ん だ \ ( ^ o ^ ) /

Q1 Commando

sum(i,j) = x_i + x_{i+1} + ... + x_{j}
f(x) = a*x*x + b*x + c
とすると、
dp[i] = max(f(sum(0,i)), dp[0]+f(sum(1,i)), dp[1]+f(sum(2,i)), ..., dp[i-1]+f(sum(i,i))))
でO(n^2)で求まる。
intでは足りない事にも注意した。

…はずだった。
配点の50%がn≦10000なので取れると思ったが、なぜか20%しか取れなかった。謎。

Q2 Patrol

k=1の時は木の直径になることは気づいたが、何故かノード1を通る直径を求めるプログラムを書いてしまっていた。
k=2の時は混乱した。

落ち着けば30点貰えたのに16点だった。かなしい。

Q3 Signaling

  1. 1点を決める
  2. その点を原点とした偏角を他の各点について計算し、その順にソート
  3. 他の各点について、最初に決めた1点とそれを通る直線の上側と下側に来る点の数(それぞれn_0, n_1とする)を二分探索で求める
  4. sumにn_0*(n_0+1)/2+2*n_0+n_1*(n_1+1)/2+2*n_1を足す
  5. 最初に決める1点をすべてについて行い、最後にsumをn(n-1)(n-2)で割って終わり

という見事に違うアルゴリズムを開発し0点でした。
n≦100のケースが40点だったから普通に全探索書けば良かった。

Result

20/16/0 合計:36
【参考】

  • メダリストボーダー:83点
  • 日本代表(6名)ボーダー:117点

最初から部分点狙っていれば50+30+40=120でメダル圏内だったから非常に口惜しいけど、
この程度の実力だと言うことを身をもって知ることが出来たので良い経験になったと思います。
// commandoが50でないのは諦めがつかないけど……。
あぁ、そうそう、メダルを手に入れたid:semiexpid:qnighyid:JAPLJ、huziwara、utatakiyoshi、灘の人はおめでとう御座いました。
内4名は日本代表ですね。IOI頑張ってきて下さい。


夏のJOIセミナーはSuperconと被るらしいので参加できそうにないから、自分が情オリと関わるのはこれで最後になりそう。
今までありがとうございました。

JOI2010 本選報告

一体いつの話題引っ張り出してくるんだって言うんですねわかりまs(ry
まとめてなかったので、一応…。

Q1

旅人が右往左往する話。
愚直に実装するとO(n^2)。
A[i]〜A[j]の総和はA[0]〜A[j]の総和からA[0]〜A[i-1]の総和を引けば良い事に気づけばO(n)でいける。

Q2

おかしを1mm単位で分割するさもしい話。
DPでした。はい。
僕は微量の部分点しか頂いておりません\(^o^)/

Q3

日本人的性格のつららのシミュレーションをする。
一つの極大なつらら→極小なつららまでの折れる時間のmaxをとる。
あるいはメモ再帰。
スタックサイズ=メモリ制限なので助かりました。

Q4

何かを開催する話です。
解説では45°回転とか言ってましたが、難しそう。

Q5

ダンジョン探検の話です。
正直4, 5問目は時間中に真面目に取り組んでな(ry
両端キューを使うそうです。

結果


20/2/20/0/0 合計:42点

ボーダーが36点位だったので一応なんとか合宿に参加出来ました。
あと何か九州ブロックの最優秀賞を貰いました。
しかし、その合宿では世にも恐ろしい物をみることになったのです…(つづく)

外積と行列式

最近、電磁気の勉強をしていて、ベクトルの外積が行列式で表されることを知りました。


ベクトルの外積とは、ベクトルの掛け算のようなもので、\vec{A} \times \vec{B}と表されます。
\vec{A}\vec{B}のなす角を\thetaとすると、

\vec{A}\times\vec{B}=\left|\vec{A}\right|\left|\vec{B}\right|\sin{\theta} と定義されます。
内積のcosがsinになった感じですね。


特に二次元の時は、\vec{A}=\left(a_x, a_y\right)\vec{B}=\left(b_x,b_y\right)とすると
\vec{A}\times\vec{B}=a_x b_y - a_y b_x
となり、これは二つのベクトルがなす平行四辺形の面積に等しいです。


…と、ここまでは知っていたのですが
三次元のベクトルの場合、ベクトルの外積はスカラでなくベクトルになります。
しかもそれが、
\vec{A}\times\vec{B}=\left| \begin{array}{ccc}\vec{i} & \vec{j} & \vec{k} \\a_x & a_y & a_z \\b_x & b_y & b_z \end{array} \right|
という、非常に綺麗な行列式に纏まることにびっくり。
(\vec{i},\vec{j},\vec{k}はそれぞれx方向, y方向, z方向の基本ベクトルです)


証明とかは出来ませんので省きますが、この事実に感銘を受けました。

2進数表示プログラム

電子計算機基礎という授業で、10進数で入力される数字を2進表記で出力するプログラムをC言語で作成しなさいという問題が出ました。
普通にやっても面白くないので、ショートコーディングしてみました。

具体的なルールは以下の通り。

  • 複数のデータセットが与えられる
  • 1〜32767の数は2進表記で入力と同じ値を出力
  • 負の数や32768以上の値は"E"と出力
  • 0で終了
  • no leading zeros
main(i,n,a,b)
{
	for(;b=!scanf("%d",&n),n;puts(i<14?"":"E"))
		for(i=32;(b|=a=(n>>--i)&1)?~i&&i<15&&putchar(a+48):~i;);
}

改行・Tabを消去して114Bytes。
100Bytes以下にできたら先輩に寿司を奢ってもらう約束だったけど叶いませんでしたorz

無限の猿定理

「無限の猿定理」と呼ばれる,確率論の定理があります。

「ランダムに文字列を打ち続けていれば,そのうちシェイクスピアの作品を打ち出す」という定理です。
確かに時間が無限大にあったら,そのうちあらゆる文字列が出てきそうではあります。

ところで,実際にプリマス大学という大学で,6匹のクロザルの檻の中にキーボードを入れてタイプさせたそうです。
5ページ程に渡る文字列が入力されたとか。

その時の文字列はこちら。

ff
vvvvvvvpppsssggggggggggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggsssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssghhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhsssssssssssssssssssssssssss
ssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssggggggggggggggggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
ggggggggggggggggggggssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssq
sqqqqqqsqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqaqqqqqqqqqqqqqqq
qqaqqqqqqqqqqqqqqqqqaqaaaqaaaaaqaaqqqqqqqqqqqqqqqqqqqqqqqqqq
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqaqaqqaaaaaaaaaa
aaaaaaaaaaaaaqaaaqaaqaqaaaaaaqqaaaaaaaaaqaaqaaaaaaaaaaqqqqaaqaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaqaaaaqqqaaaaaqaaqqaaaaqaaaaaaaaaaaaaa
aaaaaaqaaaaqaaqaaaaaaaaaaaaaaaaaqaaaaqaaaaqqqaaaaqaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaldvvvvvvnvvvvvvvvvacvvvvvvvvjkjsssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssaaavalavgggggggggggggvvasssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaa
aaaaaaasssssssssssssssssfssssfhgggggggsssassfssssssgggggggaaavmlvvssajjjlssssssssssssssssajjjajaajjsssssaaaaaaaaaaaaavvjjjjlaj
jjjaaaaaajjjjjjjajjjjjjjdjjajjjjjjjjjjjjjjjjjjaajjjjjjjjjjjjjjaaaaaaaaaajjjjjjjajajjjjjjjaajjjjjjjjjjjjjbjmmslllggmmlljjmmmmm
njjjnvvvnbvvmmllnknnbmmmmllllllllllllllllllllllllllllblbbbbnnfllmnnmjfgmnmmmassssssjjkbhnmnn

異常にsが多いですね…。

VSのデザイナに初期化させないプロパティを作成する

VisualStudioのデザイナを使っていると、
コンポーネントやコントロールなどを配置した時に自動的にそのメンバを初期化する。
空のコンストラクタで生成したオブジェクトを代入したり、nullを代入したり。
その自動初期化のコードを生成してほしくない!と言うことは多々あるはず。

Browsable

まず考えられるのは

[Browsable(false)]

という属性を付加すること。
こうすれば、デザイナからは見られなくなるので、少なくともコンポーネント等のユーザがデザイナから変更することはなくなる。

ShouldSerializeHogeHoge()

しかしこれでは不完全で、デザイナからは見られなくなってもVSは初期化コードを*.Designer.csに吐いてくれます。嫌な子。

これを完全に吐かせないようにするには

private bool ShouldSerializeHogeHoge()
{
	return false;
}

というメソッドをそのプロパティが入っているクラスに入れてやれば良い。
「ShouldSerializeHogeHoge」の「HogeHoge」部分は、そのプロパティの名前に変更すること。

例えばプロパティ名が「Name」であれば

private bool ShouldSerializeName()

みたいな感じで。


ShouldSerialieHogeHogeの詳しい使い方とかはmsdnとかを見て貰えば良いと思うよ。