\(\color{Red}{描述}\)

\(在n*n的棋盘上有m个K皇后,每个皇后可能被来自8个方向的其他皇后攻击\)

\(每个皇后只可能被(0-8)只皇后攻击,分别求出被(0-8)只皇后攻击的皇后数量\)

\(对于一个皇后来说,怎么找到上下左右对角线是否有皇后才是关键\)

\(如果把皇后按照x坐标分类装进vector中,对y排序\)

\(对于相同x坐标一组的皇后来说,如果是这组的第一个或最后一个,那么它只能收到左边或右边的皇后攻击。(因为按照y排序过)\)

\(如果处于中间的皇后,可以收到左右两个皇后攻击。\)

\(\color{Purple}{然后类似的我们按照y坐标分类,左对角线分类,有对角线分类。}\)

\(左对角线的x-y是固定的,右对角线的x+y是固定的,按照这个作为分类依据。\)

#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+1;
int n,m,ans[maxn],isok[10];
vector<int>vec[maxn*3];
struct p{
int x,y,id;
}a[maxn];
void init(){
for(int i=0;i<maxn*3;i++) vec[i].clear();
}
void print(){
for(int i=1;i<=m;i++) cout<<ans[i]<<" ";
cout<<endl;
}
bool coy(p a,p b){return a.y<b.y;}
bool cox(p a,p b){return a.x<b.x;}
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
cin>>a[i].x>>a[i].y;
a[i].id=i;
}
//处理列
sort(a+1,a+1+m,coy);
for(int i=1;i<=m;i++)
vec[a[i].x].push_back(a[i].id);
for(int i=1;i<=n;i++)
{
if(vec[i].size()<=1) continue;
for(int j=0;j<vec[i].size();j++)
if(j==0||j==vec[i].size()-1) ans[vec[i][j]]++;
else ans[vec[i][j]]+=2;
}
init(); sort(a+1,a+1+m,cox);
for(int i=1;i<=m;i++)
vec[a[i].y].push_back(a[i].id);
for(int i=1;i<=n;i++)
{
if(vec[i].size()<=1) continue;
for(int j=0;j<vec[i].size();j++)
if(j==0||j==vec[i].size()-1) ans[vec[i][j]]++;
else ans[vec[i][j]]+=2;
}
init();
//右对角的x+y都相同
for(int i=1;i<=m;i++)//上面已经按照x排序了
vec[a[i].x+a[i].y].push_back(a[i].id);
for(int i=1;i<=2*n;i++)
{
if(vec[i].size()<=1) continue;
for(int j=0;j<vec[i].size();j++)
if(j==0||j==vec[i].size()-1) ans[vec[i][j]]++;
else ans[vec[i][j]]+=2;
}
init();
//左对角的x-y都相同
for(int i=1;i<=m;i++)
vec[int(a[i].x-a[i].y+1e5)].push_back(a[i].id);
for(int i=0;i<=2e5;i++)
{
if(vec[i].size()<=1) continue;
for(int j=0;j<vec[i].size();j++)
if(j==0||j==vec[i].size()-1) ans[vec[i][j]]++;
else ans[vec[i][j]]+=2;
}
for(int i=1;i<=m;i++) isok[ans[i]]++;
for(int i=0;i<=8;i++) cout<<isok[i]<<" ";
}

E. Yet Another Task with Queens(分类思想)的更多相关文章

  1. iOS 分类思想(2)

    /******************* NSString+NumCount.h文件 ******************************/ #import <Foundation/Fo ...

  2. iOS 分类思想(1)

    1.需求:如果对一个类在不更改代码的基础上要为它再扩充额外的方法可以使用继承和分类 2.分类 作用:可以在不修改原来类代码的基础上,给某一个类扩充一些对象方法或者类方法,因此一个类可以有多个分类 实现 ...

  3. HUST 1698 - 电影院 组合数学 + 分类思想

    http://acm.hust.edu.cn/problem/show/1698 题目就是要把一个数n分成4段,其中中间两段一定要是奇数. 问有多少种情况. 分类, 奇数 + 奇数 + 奇数 + 奇数 ...

  4. 【codeforces 131E】Yet Another Task with Queens

    [题目链接]:http://codeforces.com/problemset/problem/131/E [题意] 给你n*n坐标上的m个皇后的位置; 然后让你求出,能够攻击到0,1,2-8个其他皇 ...

  5. [源码解析] 并行分布式任务队列 Celery 之 Task是什么

    [源码解析] 并行分布式任务队列 Celery 之 Task是什么 目录 [源码解析] 并行分布式任务队列 Celery 之 Task是什么 0x00 摘要 0x01 思考出发点 0x02 示例代码 ...

  6. 吴恩达机器学习笔记18-多类别分类:一对多(Multiclass Classification_ One-vs-all)

    对于之前的一个,二元分类问题,我们的数据看起来可能是像这样: 对于一个多类分类问题,我们的数据集或许看起来像这样: 我用3 种不同的符号来代表3 个类别,问题就是给出3 个类型的数据集,我们如何得到一 ...

  7. 16.分类和static

    1.案例驱动模式 1.1案例驱动模式概述 (理解) 通过我们已掌握的知识点,先实现一个案例,然后找出这个案例中,存在的一些问题,在通过新知识点解决问题 1.2案例驱动模式的好处 (理解) 解决重复代码 ...

  8. OPTM-Optimal Marks-SPOJ839最小割

    You are given an undirected graph G(V, E). Each vertex has a mark which is an integer from the range ...

  9. javaSE ---OOP总结

    面向对象编程(Object Oriented Programming,OOP)是当前最主流的编程范式之一,Java是一门纯面向对象的编程语言.我们常说C++是一门面向对象的编程语言,C++是C语言的一 ...

随机推荐

  1. 来说说Java中String 类的那些事情

    今天正好学校那边的任务不多,我就打算把Stirng 的有关知识点都总结在一起了,这样有利于知识的系统性,要不然学多了就会越来越杂,最主要的是总会忘记,记忆的时间太短了,通过这种方式,把它归纳在一起,写 ...

  2. Linux Mint(Ubuntu)如何管理开机自动启动项?

    Linux Mint自带了一个简洁的开机自启管理应用,使用方法也很简单: 依次点击“Menu”==>“控制中心”==>“个人”==>“启动应用程序”,界面如图所示: 上面打勾的就是系 ...

  3. CentOS 7 yum安装 k8s 创建Pod一直处于ContainerCreating状态 问题解决

    问题描述 使用CentOS7的 yum 包管理器安装了 Kubernetes 集群,使用 kubectl 创建服务成功后,执行 kubectl get pods,发现AGE虽然在不断增加,但状态始终不 ...

  4. 学习Saleforce | 业内第一份Salesforce学习者数据报告

    自从自由侠部落这个Salesforce中文学习平台成立以来,我们接触到了越来越多的Salesforce的学习者,由衷感觉到这个学习生态圈愈发蓬勃发展. 为了了解Salesforce学习者的基本情况.现 ...

  5. Daily Scrum 12/16/2015

    Process: Dong&Minlong : 继续对Oxford Speech 接口进行调试,并且完成了相应工作的转接. Yandong@Zhaoyang: 完成了对一些Bug的修复工作,程 ...

  6. LCS(记录路径)+LIS+LCIS

    https://blog.csdn.net/someone_and_anyone/article/details/81044153 当串1 和 串2 的位置i和位置j匹配成功时, dp[i][j]=d ...

  7. 【翻译】TensorFlow卷积神经网络识别CIFAR 10Convolutional Neural Network (CNN)| CIFAR 10 TensorFlow

    原网址:https://data-flair.training/blogs/cnn-tensorflow-cifar-10/ by DataFlair Team · Published May 21, ...

  8. 常问的MySQL面试题整理

    char.varchar 的区别是什么? varchar是变长而char的长度是固定的.如果创建的列是固定大小的,你会得到更好的性能 truncate 和 delete 的区别是什么? delete ...

  9. 如何用Github钩子做自动部署

    最近机缘巧合的购置了域名和服务器,不用实在是浪费,再加上一直没有属于自己的个人网站,所以打算用hexo在服务器上玩一下,这样也就不用再纠结用Github pages还是Gitee pages了.当然, ...

  10. 前端基础-HTML(1)

    1.浏览器: 1.1 浏览器内核: 渲染引擎和JS引擎 渲染引擎:负责页面内容的在(html,xml,图像等).整理讯息(加入css等),以及计算网页的显示方式,然后输出至显示器后者打印机 JS引擎: ...