E. Yet Another Task with Queens(分类思想)
\(\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(分类思想)的更多相关文章
- iOS 分类思想(2)
/******************* NSString+NumCount.h文件 ******************************/ #import <Foundation/Fo ...
- iOS 分类思想(1)
1.需求:如果对一个类在不更改代码的基础上要为它再扩充额外的方法可以使用继承和分类 2.分类 作用:可以在不修改原来类代码的基础上,给某一个类扩充一些对象方法或者类方法,因此一个类可以有多个分类 实现 ...
- HUST 1698 - 电影院 组合数学 + 分类思想
http://acm.hust.edu.cn/problem/show/1698 题目就是要把一个数n分成4段,其中中间两段一定要是奇数. 问有多少种情况. 分类, 奇数 + 奇数 + 奇数 + 奇数 ...
- 【codeforces 131E】Yet Another Task with Queens
[题目链接]:http://codeforces.com/problemset/problem/131/E [题意] 给你n*n坐标上的m个皇后的位置; 然后让你求出,能够攻击到0,1,2-8个其他皇 ...
- [源码解析] 并行分布式任务队列 Celery 之 Task是什么
[源码解析] 并行分布式任务队列 Celery 之 Task是什么 目录 [源码解析] 并行分布式任务队列 Celery 之 Task是什么 0x00 摘要 0x01 思考出发点 0x02 示例代码 ...
- 吴恩达机器学习笔记18-多类别分类:一对多(Multiclass Classification_ One-vs-all)
对于之前的一个,二元分类问题,我们的数据看起来可能是像这样: 对于一个多类分类问题,我们的数据集或许看起来像这样: 我用3 种不同的符号来代表3 个类别,问题就是给出3 个类型的数据集,我们如何得到一 ...
- 16.分类和static
1.案例驱动模式 1.1案例驱动模式概述 (理解) 通过我们已掌握的知识点,先实现一个案例,然后找出这个案例中,存在的一些问题,在通过新知识点解决问题 1.2案例驱动模式的好处 (理解) 解决重复代码 ...
- 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 ...
- javaSE ---OOP总结
面向对象编程(Object Oriented Programming,OOP)是当前最主流的编程范式之一,Java是一门纯面向对象的编程语言.我们常说C++是一门面向对象的编程语言,C++是C语言的一 ...
随机推荐
- 几行代码实现cookie的盗取
前言 上一篇文章中介绍了XSS(跨站脚本攻击)简单原理与几种类型.接下来通过实例用几行代码实现cookie的盗取. 正文 这里测试用的工具是DVWA(可以本地搭建,前面文章有介绍),和phpstudy ...
- mysql 主键和默认 设为索引的规则
一.mysql 表中如果是单主键的话,那这个主键也会被 系统默认建为 索引 二.mysql 表中如果是复合主键的话,那系统会遵循左对齐原则,即如复合主键 a 和 b字段和c字段..., 默认建的主键索 ...
- 自动补全、回滚!介绍一款可视化 sql 诊断利器
Yearning简介 ================= Yearning MYSQL 是一个SQL语句审核平台.提供查询审计,SQL审核等多种功能,支持Mysql,可以在一定程度上解决运维与开发之间 ...
- linux常用命令整理(一)
1.sort(排序) 典型例题:sort -t: -k3n /etc/passwd 以冒号为分隔符根据第三个域的数字大小进行排序(默认分隔符是空格) 2.uniq(去除文件中的连续重复行) 典型例题: ...
- python成功安装torch模块
最近项目要使用到torch模块,但是在安装的过程中发现torch直接使用pip install安装是安装不成功的.然后就百度,发现并没有什么卵用,所以就google一番,不禁感叹,这种新的东西,还是外 ...
- Extjs入门——环境配置
Extjs框架作为一个07年就上线的框架,虽然与现在的框架对比,显得十分臃肿.但是在针对企业内部引用系统上,它依旧能发挥出不错的效果.现在我接触到了Extjs,所以我准备写一个入门框架,简单的介绍Ex ...
- stand up meeting 11/17/2015
今日工作总结: 冯晓云:代表组内参加了北航软工M1检查,有幸在工作展开之前先观摩别人的工作,吸取经验和教训:现在看来,当时对往届ASE学员的采访还不够深入,只说统筹分工团结合作还是有些空,具体的任务划 ...
- mysql 创建表 索引 主键 引擎 自增 注释 编码等
CREATE TABLE text(id INT(20) COMMENT '主键',NAME VARCHAR(20) COMMENT '姓名',PASSWORD VARCHAR(20) COMMENT ...
- 白话理解https
为什么需要加密? 因为http的内容是明文传输的,传输过程有可能被劫持或被篡改(中间人攻击),如何解决? 当然是加密.最简单的方式就是对称加密(快). 对称机密 就是一个密钥,可以理解为一把钥匙,我们 ...
- thinkphp5.0.x
payload5.0.24 http://-----/index.php?s=index/think\app/invokefunction&function=call_user_func_ar ...