mayoko’s diary

プロコンとかいろいろ。

SRM 469 div1 easy:TheMoviesLevelOneDivOne

SRM469の練習会に参加しました。結果としてはmedだけ通ってやっぱりそこそこといった結果でした。easyのミスはボケすぎな感じある…

問題:TopCoder Statistics - Problem Statement

解法:予約している人が誰もいなければn行おきにm-1通りの座り方があるのでn*(m-1)通りです。予約している人がいると(#が予約席だとして),
??#??
という席順では(#の左,#)という席順と(#,#の右)という席順はダメです。#が隣り合ってたりすると面倒なのでsetで管理すると楽です。
本番(というか練習会)ではlong long にキャストするの忘れてclimpetさんに1分くらいで落とされました。早い。
以下ソースコード

class TheMoviesLevelOneDivOne {
public:
    long long find(int n, int m, vector <int> row, vector <int> seat) {
        ll ans = (ll)n*(m-1);
        int size = row.size();
        set<pair<int, int> > used;
        for (int i = 0; i < size; i++) {
            if (seat[i]+1 <= m) used.insert(make_pair(row[i], seat[i]+1));
            if (seat[i]-1 >= 1) used.insert(make_pair(row[i], seat[i]));
        }
        for (auto el : used) {
            cout << el.first << "  " << el.second << endl;
        }
        return ans - used.size();
    }
};