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语言的一 ...
随机推荐
- MySQL锁---InnoDB行锁需要注意的细节
前言 换了工作之后,接近半年没有发博客了(一直加班),emmmm.....今天好不容易有时间,记录下工作中遇到的一些问题,接下来应该重拾知识点了.因为新公司工作中MySQL库经常出现查询慢,锁等待,节 ...
- CentOS安装C函数库的man帮助
安装linux可能没有安装C的man帮助, 像我安装时选择的是最小化安装就没有, 网上的大多是ubunu的安装方式,或者是C++的man帮助, 都不适合,那么CentOS安装C man手册的方法就是: ...
- 多级菜单初写(dict使用)
#!/usr/bin/env python3# -*- coding:utf-8 -*-# name:zzyumap = { "中国":{ "北京":{ &qu ...
- 练习,自定义TextView(1.1)
重新自定义TextView是非常有趣的事情,跟着Android4高级编程,通过自定义TextView,来敲一下代码: 这个是那么的简单,自定义TextView,新建CustomTextView继承Te ...
- Python-selenium 元素定位
1.id定位find_element_by_id() 通过id属性定位元素,如果id是动态变化的话不能用id来进行定位 2.name定位find_element_by_name() 通过name属性定 ...
- Python下将一般对象打印成Json
有的时候,我们在写Python程序的时候,在处理复杂对象的时候,有的时候过程中调试,需要去看看产生的对象如何,有的时候我们可以把它打印成json来看,这个是个不错的办法. 对每一个对象写一个独立的打印 ...
- Daily Scrum 1/11/2016
Zhaoyang & Minlong: Took and edited the video which introduced our APP. Yandong: Summarized bugs ...
- Spring IoC getBean 方法详解
前言 本篇文章主要介绍 Spring IoC 容器 getBean() 方法. 下图是一个大致的流程图: 正文 首先定义一个简单的 POJO,如下: public class User { priva ...
- ChaosBlade--动态脚本实现 Java 实验场景
动态脚本实现 : 参考文档:https://github.com/chaosblade-io/chaosblade/wiki/%E5%8A%A8%E6%80%81%E8%84%9A%E6%9C%AC% ...
- c++类初始化列表初探
目录 1 初始化和赋值 1.1 结论 2 构造函数初始化列表 2.1 结论 3 必须使用初始化列表的情况 3.1 结论 4 成员初始化顺序 5 参考资料 1 初始化和赋值 初始化:创建一个对象并赋予一 ...