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 不能对同一个表进行 update(delete) 和 select 联合操作
eq: update a set a.x = 1 where a.y in (select a.x from a); 上边语法是错误的,在对aupdate 时不能再条件中对同一个a表进 ...
- 004-流程控制-C语言笔记
004-流程控制-C语言笔记 学习目标 1.[掌握]关系运算符和关系表达式 2.[掌握]逻辑运算符和逻辑表达式 3.[掌握]运算符的优先级和结合性 4.[掌握]if-else if-else结构的使用 ...
- 【Java】Array 数组
概述 数组是多个相同数据类型按一定顺序排列的一组数据 特点: - 数据类型相同!! - 长度固定!! 构成数组的几个要素 - 数组名称 - 下标,又称索引 - 元素 - 数组长度 数组是一种引用类型, ...
- L19深度学习中的优化问题和凸性介绍
优化与深度学习 优化与估计 尽管优化方法可以最小化深度学习中的损失函数值,但本质上优化方法达到的目标与深度学习的目标并不相同. 优化方法目标:训练集损失函数值 深度学习目标:测试集损失函数值(泛化性) ...
- spring boot 项目 mvn clean install 报 "Unable to find main class" 的解决方法
按照步骤来总会解决的 检查pom.xml中是否加入了spring boot maven插件 <build> <plugins> <plugin> <group ...
- go 基础 结构体
结构体是类型中带有成员的复合类型.go语言使用结构体和结构体成员来描述真实世界的实体和实体对应的各种属性. go语言中的类型可以被实例化,使用new和&构造类型实例的类型是类型的指针. 结构体 ...
- 手机app测试用例怎么写?手机app测试点有哪些?只有干货没有水分,错过绝对后悔!
一.前言 在当今竞争激烈的市场上一个APP的成功离不开一个可靠的测试工程师.因此,对功能和用户体验有特殊关注的App进行全面测试是必不可少的.如何做到测试用例的百分百覆盖一直是测试用例编写过程中 ...
- JDBC 中的事务和批处理 batch
JDBC事务处理: 事务处理一般在事务开始前把事务提交设置为false 所有DML语句执行完成后提交事务 demo: package com.xzlf.jdbc; import java.sql.Co ...
- JVM 真的很难学么?不、只是你“不敢学”而已
JVM 真的很难学么?不.只是你"不敢学"而已 许多招聘的信息上面都说,要了解jvm.多线程什么的对于 java 程序员来说,这是工作好多年的程序员都不一定能掌握的东 ...
- Spring Cloud 系列之 Sleuth 链路追踪(三)
本篇文章为系列文章,未读前几集的同学请猛戳这里: Spring Cloud 系列之 Sleuth 链路追踪(一) Spring Cloud 系列之 Sleuth 链路追踪(二) 本篇文章讲解 Sleu ...