zoukankan      html  css  js  c++  java
  • CCF认证 2019-12-3


    分析

    后面的数据,坐标分布太离散,不能用一个二位数组来模拟垃圾分布。因此,考虑用一个数组记录每个垃圾点的位置。

    1. 先根据x坐标、再根据y坐标进行排序。
    2. 再遍历数组中的每一处垃圾点,判断其是否能建回收站(相邻处有无垃圾),在判断对角线的垃圾点数目
      判断的过程中,可以用二分查找减少查找时间,毕竟已经排好序了。
    #include <stdio.h>
    #include <iostream>
    #include <stdlib.h>
    #include <algorithm>
    using namespace std;
    class pos{
    public:
    	int x, y;
    	
    	pos(){
    		
    	}
    	pos(int _x, int _y){
    		x = _x;
    		y = _y;
    	}
    	bool operator==(const pos a){
    		if(a.x == x && a.y == y)	return true;
    		else return false;
    	}
    	
    	bool operator<(const pos a) const{
    		if(x < a.x)
    			return true;
    		else if(x == a.x){
    		if(y < a.y)
    			return true;
    		else
    			return false;
    		}
    		else
    			return false;
    	}
    	
    };
    
    
    int n;
    pos a[1002];
    int num[5];
    int dir1[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
    int dir2[4][2] = {{1, 1}, {-1, 1}, {1, -1}, {-1, -1}};
    
    int main(){
    	cin >> n;
    	int x = 0, y = 0;
    	for(int i = 0;i < n; i++){
    		scanf("%d %d", &x, &y);
    		a[i] = pos(x, y);
    	}
    	sort(a, a + n);
    	
    	for(int i = 0; i < n; i++){
    		int flag = 0;
    		for(int j = 0; j < 4;j++){
    			flag += binary_search(a, a + n, pos(a[i].x + dir1[j][0], a[i].y + dir1[j][1]));
    		}
    		
    		if(flag ==  4){
    			flag = 0;
    			for(int j = 0; j < 4;j++){
    				flag += binary_search(a, a + n, pos(a[i].x + dir2[j][0], a[i].y + dir2[j][1]));
    			}
    			num[flag]++;
    		}
    		
    	}
    	
    	for(int i = 0;i < 5; i++){
    		cout << num[i] << endl;
    	}
    	return 0;
    }
    
  • 相关阅读:
    PHP chgrp() 函数
    PHP basename() 函数
    PHP user_error() 函数
    PHP trigger_error() 函数
    my.cnf需要改的参数
    WPF 使用 Direct2D1 画图入门
    win10 uwp 如何开始写 uwp 程序
    win10 uwp 如何开始写 uwp 程序
    C# 快速释放内存的大数组
    C# 快速释放内存的大数组
  • 原文地址:https://www.cnblogs.com/woxiaosade/p/12219069.html
Copyright © 2011-2022 走看看