Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- typedef struct sprinker {
- int l;
- int r;
- } sprinkler;
- public:
- int min_sprinklers(int gallery[], int n)
- {
- int freq[n];
- vector<sprinkler> vec;
- for(int i = 0; i < n; i++) freq[i] = 0;
- for(int i = 0 ; i < n; i++) {
- int x = gallery[i];
- if(x == -1) continue;
- int l = max(0, i - x);
- int r = min(n-1, i + x);
- sprinkler s;
- s.l = l;
- s.r = r;
- vec.push_back(s);
- for(int j = l; j <= r; j++) {
- freq[j]++;
- }
- }
- for(int i = 0; i < n; i++) {
- if(freq[i] == 0) return -1;
- }
- stable_sort(vec.begin(), vec.end(), [](sprinkler s1, sprinkler s2) { return s1.r-s1.l < s2.r-s2.l; });
- int sprinklers = vec.size();
- for(int i = 0; i < vec.size(); i++) {
- int l = vec[i].l;
- int r = vec[i].r;
- bool flag = false;
- for(int j = l; j <= r; j++) {
- if(freq[j] == 1) {
- flag = true;
- break;
- }
- }
- if(!flag) {
- for(int j = l; j <= r; j++) freq[j]--;
- sprinklers--;
- }
- }
- return sprinklers;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement