博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GYM - 101147 F.Bishops Alliance
阅读量:5300 次
发布时间:2019-06-14

本文共 2386 字,大约阅读时间需要 7 分钟。

题意:

  一个n*n的棋盘,有m个主教。每个主教都有自己的权值p。给出一个值C,在棋盘中找到一个最大点集。这个点集中的点在同一条对角线上且对于点集中任意两点(i,j),i和j之间的主教数(包括i,j)不小于pi^2+pj^2+C。

题解:

  对角线有2个方向,每个方向有2*n-1条对角线。一共时4*n-2条。每个点都在2条对角线上。

  对于在同一对角线上的点(i,j)若满足i-j+1>=pi^2+pj^2+C即-j-pj^2>=pi^2+C-i-1(i>j)即可。

  那么将同一对角线上的点按x坐标排序。将每个点的信息整合到一起离散化,最后用树状数组维护每个点前面满足-j-pj^2>=pi^2+C-i-1的最大值。

#include 
using namespace std;typedef long long ll;typedef pair
P;const int maxn = 1e5+10;int t;int n, m;ll c;int u, v;ll p;int cnt;int ans;ll _sort[maxn<<1];int tree[maxn<<1];struct node { int x; ll val; node(int a, ll b) { x = a; val = b; }};vector

bs[2][maxn<<1]; void update(int x, int val) { while(x <= cnt) { tree[x] = max(tree[x], val); x += x&(-x); }}int sum(int x) { int res = 0; while(x > 0) { res = max(res, tree[x]); x -= x&(-x); } return res;}int main() { freopen("bishops.in","r",stdin); scanf("%d", &t); while(t--) { ans = 0; scanf("%d%d%lld", &n, &m, &c); for(int i = 0; i < 2; i++) for(int j = 1; j < 2*n; j++) bs[i][j].clear(); while(m--) { scanf("%d%d%lld", &u, &v, &p); p *= p; bs[0][u+v-1].push_back(P(u, p)); bs[1][u-v+n].push_back(P(u, p)); } for(int i = 0; i < 2; i++) for(int j = 1; j < 2*n; j++) sort(bs[i][j].begin(), bs[i][j].end()); for(int i = 0; i < 2; i++) for(int j = 1; j < 2*n; j++) { int len = bs[i][j].size(); cnt = 0; for(int k = 0; k < len; k++) { int x = bs[i][j][k].first; ll p = bs[i][j][k].second; _sort[cnt++] = -p-x; _sort[cnt++] = p+c-x-1; } sort(_sort, _sort+cnt); cnt = unique(_sort, _sort+cnt)-_sort; for(int k = 1; k <= cnt; k++) tree[k] = 0; for(int k = 0; k < len; k++) { int x = bs[i][j][k].first; ll p = bs[i][j][k].second; int id = cnt-(lower_bound(_sort, _sort+cnt, p+c-x-1)-_sort); int tmp = sum(id); ans = max(ans, tmp+1); id = cnt-(lower_bound(_sort, _sort+cnt, -p-x)-_sort); update(id, tmp+1); } } printf("%d\n", ans); }}

View Code

 

转载于:https://www.cnblogs.com/Pneuis/p/8900834.html

你可能感兴趣的文章
XSS原理及防范
查看>>
WPF中Image显示本地图片
查看>>
SVN版本管理
查看>>
哈希表等概率情况下查找成功和查找不成功的平均查找长度的计算
查看>>
Windows Phone 7你不知道的8件事
查看>>
数据结构(三十七)查找的基本概念
查看>>
Java基础(十六)断言(Assertions)
查看>>
脚本删除文件下的文件
查看>>
实用拜占庭容错算法PBFT
查看>>
笔试题资源整理(1)
查看>>
ubuntu16.04 anaconda3安装
查看>>
css 外边距,内边距的使用
查看>>
关于窗口Y坐标的小问题
查看>>
php gd 图像翻转,php(gd库)输出中文图像的转换函数
查看>>
java 表头添加复选框,表头带有CheckBox可以实现全选的jtable
查看>>
java b组 小计算器,简单计算器..
查看>>
php server port,$_SERVER[‘SERVER_PORT’]关于php5.2一个bug
查看>>
php 类 init,PHP内核探索:类的定义
查看>>
java的二叉树树一层层输出,Java构造二叉树、树形结构先序遍历、中序遍历、后序遍历...
查看>>
meep php,麻省理工时域差分软件 MEEP windows 下编译开发(一)——准备工作
查看>>