1. 程式人生 > >codeforces-1066B Heaters

codeforces-1066B Heaters

%d first size pair per string ++ r+ fin

  1 #include <cstdio>
  2 #include <cstring>
  3 #include <vector>
  4 #include <iostream>
  5 #include <algorithm>
  6 #include <set>
  7 #include <map>
  8 #include <stack>
  9 
 10 using namespace std;
 11 
 12 #define _for(i,a,b) for(int i = (a);i < (b);i ++)
 13
#define _rep(i,a,b) for(int i = (a);i <= (b);i ++) 14 typedef long long int ll; 15 16 struct cmp 17 { 18 inline bool operator() (const int a,const int b) 19 { 20 return a >= b; 21 } 22 }; 23 24 int readint() 25 { 26 int x; //vector<int> v;v.push_back(readint())
27 scanf("%d",&x); 28 return x; 29 } 30 31 struct edge 32 { 33 int Left; 34 int Right; 35 }; 36 37 int main() 38 { 39 int n,r; 40 while(~scanf("%d %d",&n,&r)) 41 { 42 vector<pair<int,int>> v; 43 int heaterNum = 0; 44
for(int i = 0;i < n;i ++) 45 { 46 int tmp; 47 scanf("%d",&tmp); 48 if(tmp) 49 { 50 heaterNum ++; 51 int left,right; 52 left = i-r+1; 53 right = i+r-1; 54 if(i-r+1<0) 55 { 56 left = 0; 57 } 58 if(i+r-1>=n) 59 { 60 right = n-1; 61 } 62 v.push_back(make_pair(left,right)); 63 } 64 } 65 66 sort(v.begin(),v.end()); 67 // for(auto p:v) 68 // cout << p.first << " " << p.second << endl; 69 int test[n] {0}; 70 for(int i = 0;i < v.size();i ++) 71 { 72 for(int j = v[i].first;j <= v[i].second;j ++) 73 test[j] = 1; 74 } 75 int flag = 0; 76 for(auto d:test) 77 { 78 if(!d) 79 { 80 flag = 1; 81 } 82 } 83 if(flag) 84 { 85 cout << "-1" << endl; 86 continue; 87 } 88 89 int m[n] {0}; 90 int result = 0; 91 for(int i = 0;i < n;i ++) 92 { 93 if(m[i]==0) 94 { 95 for(int j = v.size()-1;j >= 0;j --) 96 { 97 if(v[j].first<=i) 98 { 99 result ++; 100 for(int k = v[j].first;k <= v[j].second;k ++) 101 m[k] = 1; 102 break; 103 } 104 } 105 } 106 } 107 cout << result << endl; 108 } 109 return 0; 110 }

codeforces-1066B Heaters