SRM 508 Round 1(?) div2 easy CandyShop
方針
素直に調べる。
雑感
何で Round 1 なの?
回答例
#include <sstream> #include <string> #include <vector> #include <map> #include <algorithm> #include <iostream> #include <utility> #include <set> #include <cctype> #include <queue> #include <stack> #include <cstdio> #include <cstdlib> #include <cmath> #include <iterator> using namespace std; class CandyShop{ vector<vector<bool> > ok; size_t n; public: int countProbablePlaces(vector <int> x, vector <int> y, vector <int> r){ n = x.size(); const size_t oksize = 500; const size_t o = oksize / 2; ok.clear(); ok.resize(oksize, vector<bool>(oksize, true)); for(size_t i = 0; i < n; ++i){ x[i] += o; y[i] += o; } for(size_t i = 0; i < n; ++i){ for(size_t j = 0; j < oksize; ++j){ for(size_t k = 0; k < oksize; ++k){ if(dist(x[i], y[i], j, k) > r[i]){ ok[j][k] = false; } } } } int ret = 0; for(size_t j = 0; j < oksize; ++j){ for(size_t k = 0; k < oksize; ++k){ if(ok[j][k]){ ret++; } } } return ret; } int dist(int x, int y, int v, int w){ //cout << x << " " << y << " " << v << " " << w << " " << abs(x-v) + abs(y-w) << endl; return abs(x-v) + abs(y-w); } };