SRM468 Div1 250 TheMovieLevelOneDivOne
問題
- n*mの座席から並んだ2席を予約したい
- 最大47席が予約済みなので,予約の仕方は何通りあるかを答える
- nもmも最大10億
解法
- 数え上げるだけの簡単なお仕事
- 答えがlong longになる事にだけ注意する
#include <iostream> #include <vector> #include <map> #include <algorithm> using namespace std; class TheMoviesLevelOneDivOne{ public: long long find(int n, int m, vector<int> row, vector<int> seat){ map<int, vector<int> > S; for(int i=0;i<row.size();i++){ if(!S.count(row[i])) S[row[i]] = vector<int>(); S[row[i]].push_back(seat[i]); } long long ans = 0; map<int, vector<int> >::iterator it = S.begin(); while(it != S.end()){ vector<int> vi = it->second; vi.push_back(m+1); sort(vi.begin(), vi.end()); int cur = 0; for(int i=0;i<vi.size();i++){ if(vi[i]-cur>2) ans += (vi[i]-cur-2); cur = vi[i]; } it++; } ans += (n-S.size())*((long long)m-1); return ans; } };