つらねの日記

プログラムの進捗やゲームをプレイした感想などを書き連ねる日記。

AOJ 2015 - Square Route

Square Route | Aizu Online Judge

問題

街がある。その街の道路は端から端まで引かれている。
矩形の辺に道路を使って正方形を作り、その数を数えろ。



考え方

各道路の交点から左上に線を引きその線上に別の交点が存在したときに正方形を作ることができる。
そのためにまず、各交点をX軸状に射影する。

int y = 0, dy;
for(int xx:xs){
	ps[xx-y]++;
}
REP(i, h_n){
	cin >> dy;
	y += dy;
	for(int xx:xs){
		ps[xx-y]++;
	}
}

交点の数(n)が求まったら、Σnで解が求まる(nの値毎に正方形がいくつできるのか数えたらΣnっぽかった)。