Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- struct raport{
- int sus, jos;
- raport(const int x, const int y){
- if(x == 0 && y == 0)
- sus = jos = 0;
- else{
- const int tmp = __gcd(x, y);
- sus = x / tmp;
- jos = y / tmp; } }
- bool operator==(const raport& rhs)const{
- return sus == rhs.sus && jos == rhs.jos; }
- bool operator<(const raport& rhs)const{
- return (long long)sus * rhs.jos <
- (long long)jos * rhs.sus; } };
- int nr_vizibile(vector<raport> v){
- sort(begin(v), end(v), [](const raport& a, const raport& b){
- return a.jos < b.jos; });
- int rez = 1;
- raport cur = v[0];
- for(const auto r : v)
- if(cur < r) cur = r, ++rez;
- return rez; }
- map<raport, vector<raport>> mp;
- int p, n, m;
- ifstream f("ace.in");
- ofstream g("ace.out");
- int main(){
- f >> p >> n >> m;
- for(int i = 0, h; i < n; ++i){
- for(int j = 0; j < (i == n-1 ? m-1 : m); ++j){
- f >> h;
- const int dx = n-1-i, dy = m-1-j;
- mp[raport(dx, dy)].push_back(
- raport(h*h, dx*dx + dy*dy)); } }
- if(p == 1)
- g << nr_vizibile(mp[raport(0, 1)]) +
- nr_vizibile(mp[raport(1, 0)]) << endl;
- else{
- int rez = 0;
- for(const auto x : mp)
- rez += nr_vizibile(x.second);
- g << rez << endl; }
- return 0; }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement