回收站选址

回收站选址


from CCF-CSP 2019-12-2
Time limit:1s
Memory limit:512MB

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


这个题目n的个数是1000,所以是可以直接O(n2)暴力解决的,我们在嵌套循环里面分别记录某个点上下左右垃圾的个数和对角位置垃圾的个数,如果上下左右四个位置都存在垃圾,那么这个点是适合建立垃圾回收站的,进而把得分存入score数组就可以了。

ac代码:
#include<iostream>
using namespace std;
pair<int,int> pii[1005];//存储点的信息
int score[5];           //第0,1,2,3,4个位置分别记录得分为0,1,2,3,4的点的个数
int n;
bool check1(int x1,int y1,int x2,int y2){   //检查第二个点是否是第一个点的上下左右点
    if(x1 == x2 && (y1 == y2 + 1 || y1 == y2 - 1))
        return true;
    if(y1 == y2 && (x1 == x2 + 1 || x1 == x2 - 1))
        return true;
    return false;
}
bool check2(int x1,int y1,int x2,int y2){   //检查第二个点是否是第一个点的对角点
    if((x1 == x2 + 1 || x1 == x2 - 1) && (y1 == y2 + 1 || y1 == y2 - 1))
        return true;
    return false;
}
int main(){
    cin>>n;
    for(int i = 1;i <= n;++i)   //输入点信息
        cin>>pii[i].first>>pii[i].second;
    for(int i = 1;i <= n;++i){
        int grade = 0,note = 0;             //grade记录分数,note记录上下左右点出现了多少个
        for(int j = 1;j <= n;++j){
            if(check1(pii[i].first,pii[i].second,pii[j].first,pii[j].second))
                ++note;
            if(check2(pii[i].first,pii[i].second,pii[j].first,pii[j].second))
                ++grade;
        }
        if(note == 4)                       //如果note等于4,那么这个点适合建立回收站
            ++score[grade];
    }
    for(int i = 0;i <= 4;++i)
        cout<<score[i]<<"\n";
    return 0;
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alan_Lowe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值