はまやんはまやんはまやん

hamayanhamayan's blog

Window [JAG Practice Contest for ACM-ICPC Asia Regional 2017 A]

https://jag2017autumn.contest.atcoder.jp/tasks/jag2017autumn_a

縦H横Wの窓がN枚ある。
奇数番目はX[i]だけ右にずらし、偶数番目はX[i]だけ左にずらす。
空いている部分の面積は?
Nは偶数である。

解法

https://jag2017autumn.contest.atcoder.jp/submissions/1794235

2枚ずつ計算していく。
縦の長さは後でかければいいので、空いている面積の横の長さを足していく。

a番目とb番目での面積を考える。
X[a] + X[b]≦Wならば、行きすぎないので、移動した分窓が空いているので、X[a] + X[b]だけ空いていることになる。
W<X[a] + X[b]ならば、X[a]+X[b]-Wだけ交わった後に行き過ぎているので、その分Wから引けばいい。

総和を取って縦をかければ答え。

int N, H, W, X[101];
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> N >> H >> W;
    rep(i, 0, N) cin >> X[i];
 
    int ans = 0;
    rep(i, 0, N / 2) {
        int a = i * 2, b = i * 2 + 1;
 
        if (X[a] + X[b] <= W) ans += X[a] + X[b];
        else {
            ans += W - ((X[a] + X[b]) - W);
        }
    }
    cout << ans * H << endl;
}