Bishops Alliance—— 最大上升子序列

原题链接:http://codeforces.com/gym/101147/problem/F

题意:n*n的棋盘,给m个主教的坐标及其私有距离p,以及常数C,求位于同一对角线上满足条件:dist(i, j) >= p[i]^2 + p[j]^2 + C 

的主教集合的元素个数最大值。

解题思路

上述条件可以等价为:

  d(j) - d(i) +1 >= p[i]^2 + p[j]^2 + C    // d(i) 为第i个主教相对于该对角线顶点的距离

  d(j) - p[j]^2 - C + 1>= d(i) + p[i]^2

设 f(i) = d(i) + p[i] ^2,  g(i) = d(i) - p[i]^2 - C + 1 

下面考虑一条对角线,设 c[x]  为长度为x 的最后一个主教编号,例如c[len] = i  代表长度为len的防线最后一个主教编号为i。

(特别的,c[0] = 0, f(0) = -INF )

首先将该对角线上的主教按 d(i) 排序, len 为当前最大长度+1,依次查询每一个主教并同时更新最大长度, 伪代码如下:

  对当前查询的主教u

    j = lower_bound(c, c+len,u,cmp) - c

    if  j =len && g(u) >= f(c[j-1]) 

      c[len++] = u

    if  j != len &&  g(u) >= f(c[j-1]) 

      c[j] = u

注意: 数据范围为 LL

代码如下:

 1 #include <cstring>
 2 #include <cstdio>
 3 #include <algorithm>
 4 #include <vector>
 5 using namespace std;
 6 const int maxn = 100000+10;
 7 typedef long long LL;
 8 #define INF 999999999999999999LL
 9 vector<int> D1[2*maxn];
10 vector<int> D2[2*maxn];
11 
12 int c[maxn];
13 int row[maxn], col[maxn], p[maxn];
14 int n, m, C;
15 //计算对角线编号
16 int dig_id1(int x, int y) {return x-y+n;}
17 int dig_id2(int x, int y) {return x+y;}
18 
19 int d1(int i) {return min(row[i], col[i]);}
20 int d2(int i) {return min(n-row[i]+1, col[i]);}
21 
22 LL f1(int i) {return !i ? -INF : d1(i) + LL(p[i])*p[i];}
23 LL f2(int i) {return !i ? -INF : d2(i) + LL(p[i])*p[i];}
24 
25 LL g1(int i) {return d1(i) - LL(p[i])*p[i] - C + 1;}
26 LL g2(int i) {return d2(i) - LL(p[i])*p[i] - C + 1;}
27 
28 bool cmpd1(int i, int j) {return d1(i) < d1(j);}
29 bool cmpd2(int i, int j) {return d2(i) < d2(j);}
30 bool cmp1(const int& a,const int& b) {return f1(a) < f1(b);}
31 bool cmp2(const int& a,const int& b) {return f2(a) < f2(b);}
32 LL (*f[])(int) ={
33      f1,
34     f2
35  };
36 LL (*g[])(int) = {
37     g1,
38     g2
39 };
40 bool (*cmp[])(const int& ,const int& ) = {
41     cmp1,
42     cmp2
43 };
44 
45 int cal(vector<int> &D,int flag) {
46     if(!D.size()) return 0;
47     if(flag == 0) sort(D.begin(), D.end(), cmpd1);
48     else sort(D.begin(), D.end(), cmpd2);
49     for(int i = 0; i <= D.size(); i++) c[i] = 0;
50     int len = 1;
51     int j;
52     for(int i = 0; i < D.size(); i++){
53         int u = D[i];
54         j = lower_bound(c, c+len, u, cmp[flag]) - c;
55         if(j == len && g[flag](u) >= f[flag](c[j-1])) {
56             c[len++] = u;
57         }
58         if(j != len && g[flag](u) >= f[flag](c[j-1])) {
59             c[j] = u;
60         }
61     }
62     return len - 1;
63 }
64 #define fin stdin
65 int main() {
66 //    FILE * fin;
67 //    fin =  fopen("bishops.in", "r");
68     int T;
69     fscanf(fin, "%d", &T);
70     while(T--) {
71         fscanf(fin, "%d%d%d", &n, &m, &C);
72         for(int i = 0; i <= 2*n; i++) D1[i].clear();
73         for(int i = 0; i <= 2*n; i++) D2[i].clear();
74         for(int i = 1; i <= m; i++) {
75             fscanf(fin, "%d%d%d", &row[i], &col[i], &p[i]);
76             int id1 = dig_id1(row[i], col[i]);
77             int id2 = dig_id2(row[i], col[i]);
78             D1[id1].push_back(i);
79             D2[id2].push_back(i);
80         }
81         int ans = 0;
82         for(int i = 0; i <= 2*n; i++) {
83             ans = max(ans, cal(D1[i], 0));
84             ans = max(ans, cal(D2[i], 1));
85         }
86         printf("%d\n", ans);    
87     }
88     return 0;
89 }

 

转载于:https://www.cnblogs.com/Kiraa/p/6089377.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/253933.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeGO-LOAM学习

前言 在学习了LOAM之后&#xff0c;了解到LeGO-LOAM&#xff08;面向复杂情况的轻量级优化地面的雷达里程计&#xff09;&#xff0c;进行了一个学习整理。 Github&#xff1a;https://github.com/RobustFieldAutonomyLab/LeGO-LOAM 论文&#xff1a;https://github.com/Robu…

char data[0]用法总结

struct MyData { int nLen; char data[0]; }; 开始没有理解红色部分的内容&#xff0c;上网搜索下&#xff0c;发现用处很大&#xff0c;记录下来。 在结构中&#xff0c;data是一个数组名&#xff1b;但该数组没有元素&#xff1b;该数组…

(一)低功耗设计目的与功耗的类型

一、低功耗设计的目的 1.便携性设备等需求 电子产品在我们生活中扮演了极其重要的作用&#xff0c;便携性的电子设备便是其中一种。便携性设备需要电池供电、需要消耗电池的能量。在同等电能提供下&#xff0c;低功耗设计的产品就能够工作更长的时间。时间的就是生命&#xff…

(转)彻底学会使用epoll(一)——ET模式实现分析

注&#xff1a;之前写过两篇关于epoll实现的文章&#xff0c;但是感觉懂得了实现原理并不一定会使用&#xff0c;所以又决定写这一系列文章&#xff0c;希望能够对epoll有比较清楚的认识。是请大家转载务必注明出处&#xff0c;算是对我劳动成果的一点点尊重吧。另外&#xff0…

MFC的消息映射有什么作用

绝对以下这三个解释的比较简洁&#xff0c;特此做个记录&#xff01;以感谢回答的这些人&#xff01; MFC的消息映射有什么作用: Windows操作系统主要是有消息来处理的&#xff0c;每个程序都有自己的消息队列&#xff0c;并且这些消息是有优先级的&#xff0c;也就是谁会先…

线性表的链式存储结构

链式存储结构的定义 1.概念定义&#xff1a; - n个结点离散分配 - 彼此通过指针相连 - 每个结点只有一个前驱结点和一个后继结点 - 首结点没有前驱结点&#xff0c;尾结点没有后继结点 2.专业术语 -首结点&#xff1a;第一个有有效数据的结点 -尾结点&#xff1a;最后一个有有效…

Apache 设置http跳转至HTTPS访问

为什么80%的码农都做不了架构师&#xff1f;>>> <VirtualHost>...</VirtualHost> 中添加如下配置 <IfModule mod_rewrite.c>RewriteEngine onRewriteCond %{SERVER_PORT} 80RewriteRule ^(.*)$ https://域名/$1 [R301,L] </IfModule> 转…

JAVA线程概念

一、程序与进程 1、程序&#xff1a;一段静态的代码。 2、进程&#xff1a;程序的一次动态执行过程&#xff0c;它对应从代码加载、执行到执行完毕的一个完整过程。 3、进程也称任务&#xff0c;支持多个进程同时执行的OS就被称为多进程OS或多任务OS。 二、进程与线程 在一…

(二)功耗的分析

前面学习了进行低功耗的目的个功耗的构成&#xff0c;今天就来分享一下功耗的分析。由于是面向数字IC前端设计的学习&#xff0c;所以这里的功耗分析是基于DC中的power compiler工具&#xff1b;更精确的功耗分析可以采用PT&#xff0c;关于PT的功耗分析可以查阅其他资料&#…

Hibernate创建hqll时报错

Hibernate 问题,在执行Query session.createQuery(hql) 报错误 出错截图&#xff1a; 这条语句在java运行环境下&#xff0c;直接连数据库不出错&#xff0c;如果在hiberante,struts环境下就出错 出错原因&#xff1a;jar包冲突&#xff0c;struts2和hibernate框架中都有antlr包…

.NET Core TDD 前传: 编写易于测试的代码 -- 全局状态

第1篇: 讲述了如何创造"缝". "缝"(seam)是需要知道的概念. 第2篇, 避免在构建对象时写出不易测试的代码. 第3篇, 依赖项和迪米特法则. 本文是第4篇, 将介绍全局状态引起的问题. 全局状态 全局状态, 也可以叫做应用程序状态, 它是一组变量, 这些变量维护着…

(三)系统与架构级低功耗设计

前面讲解了使用EDA工具&#xff08;主要是power compiler&#xff09;进行功耗分析的流程&#xff0c;这里我们将介绍在数字IC中进行低功耗设计的方法&#xff0c;同时也结合EDA工具&#xff08;主要是Design Compiler&#xff09;如何实现。我们的讲解的低功耗设计主要是自顶向…

python---统计列表中数字出现的次数

1 import collections 2 3 a [1,2,3,1,2,3,4,1,2,5,4,6,7,7,8,9,6,2,23,4,2,1,5,6,7,8,2] 4 b collections.Counter(a) 5 for c in b&#xff1a; print c,b[c] 转载于:https://www.cnblogs.com/lxs1314/p/7236321.html

MFC入门(一)——MFC是一个编程框架

MFC (Microsoft Foundation Class Library)中的各种类结合起来构成了一个应用程序框架&#xff0c;它的目的就是让程序员在此基础上来建立Windows下的应用程序&#xff0c;这是一种相对SDK来说更为简单的方法。因为总体上&#xff0c;MFC框架定义了应用程序的轮廓&#xff0c;并…

2.数据结构笔记学习--线性表基本操作

线性表的结构定义&#xff1a; 顺序表的结构定义&#xff1a; typedef struct {int data[maxSize]; //存放顺序表元素的数组&#xff0c;一般用 int A[maxSize];int length; //存放顺序表的长度,一般用 int n; }SeqList; 单链表结点定义&#xff1a; typedef struct L…

(四)RTL级低功耗设计

前面介绍了系统级的低功耗设计&#xff0c;换句话说就是在系统级降低功耗可以考虑的方面。系统级的低功耗设计&#xff0c;主要是由系统级设计、具有丰富经验的人员实现&#xff0c;虽然还轮不到我们设计&#xff0c;我们了解一下还是比较好的。我们前端设计人员的重点不在系统…

Unity3D 游戏前端开发技能树(思维导图)

如果做游戏也是一种游戏,那么这个游戏的自由度实在是太高了.(导图源文件链接&#xff1a;http://pan.baidu.com/s/1eSHpH5o 密码&#xff1a;qzl5) 最近要用思维导图软件Xmind把自己的思路好好捋一捋,算是温故知新吧. 转载于:https://www.cnblogs.com/qiaogaojian/p/6098962.ht…

js forEach

&#xfeff;&#xfeff;forEach()函数从头到尾把数组遍历一遍。有三个參数各自是&#xff1a;数组元素。元素的索引&#xff0c;数组本身&#xff08;假设是一个參数就是数组元素&#xff0c;也就是数组的值。var data[1,2,3,4,5,6]; var sum0; data.forEach(function(v){//当…

SQL Server 死锁的告警监控

原文:SQL Server 死锁的告警监控今天这篇文章总结一下如何监控SQL Server的死锁&#xff0c;其实以前写过MS SQL 监控错误日志的告警信息&#xff0c;这篇文章着重介绍如何监控数据库的死锁&#xff0c;当然这篇文章不分析死锁产生的原因、以及如何解决死锁。死锁&#xff08;D…

关于web性能一些特性汇总

关于web性能一些特性汇总 DOMContentLoaded & load load事件是window对象上的事件。指的是网页资源已经加载完毕&#xff08;包括但不限于DOM、图片、音频、脚本、插件资源以及CSS&#xff09;。 DOMContentLoaded事件是document对象上的事件。指的是DOM已经加载完毕。IE中…