问题 A: 雷神领域

传送门

题目描述

L君,S大陆首屈一指的天才魔法师,创造了一个新魔法:雷神领域。  
这个魔法会首先在地面上形成正方网格魔法阵列,然后在某些位置召唤雷电轴标。注意:一个位置只能有一个雷电轴标存在。 
雷电轴标总出现在正方网格魔法阵列的顶点处,所以我们可以用一个有序整数对(X_i,Y_i)标记它的位置。  
然后,如果存在三个雷电轴标A,B,C满足:XA=XB, YA=YC,则该魔法会立即召唤一个位置在(XC,YB)的雷电轴标,如此往复直至不存在满足条件的雷电轴标组为止。  
最后,L君将选择一条正方网格魔法阵列上的路径并使用自然力激活它们,这时候雷神领域的魔法强度就被定义为路径上的雷电轴标所占用的行数中或者列数中的较小值。 
但是由于L君才刚创造这个魔法,如果选择的路径中出现U形或往返子路径,那么会给施展魔法的魔法师带来一定危险性。所以选择的路径不应该包含U形子路径或往返子路径。(类似 |__ __ __| 这样的广义U形路径也不行)  
由于自然力必须从魔法师的体内调和,所以路径的起点应该是魔法师所站的位置,即正方网格魔法阵列的左下角(0,0)点。  
现在他想要询问你——以扫地为生来隐藏自己真实身份的大陆有史以来最伟大的式神制造师Lwins_***,他所能释放的雷神领域的最高魔法强度。 
当然,路径由你来为他选择。虽然如此,作为一个魔法天才,其实他只关心最高魔法强度而已。

输入

第1行:包含一个正整数N,表示接下来的数据个数。  
接下来N行:每行包含两个正整数Xi,Yi,表示(Xi,Yi)处存在一个雷电轴标。


对于30%的数据:N≤10, 0<Xi,Yi≤5。  
对于60%的数据:0<Xi,Yi≤2000。  
对于100%的数据:N≤15000, 0<Xi,Yi≤5000

输出

包含一行,为可能的最高魔法强度。

样例输入 Copy

7
1 1
1 1
1 1
1 2
1 3
2 2
3 1

样例输出 Copy

  3

考试时的心理历程

  • 记得很早以前,老师好像说过什么题目难度和顺序无关,然后就看到第一题又是红字又是加粗还有斜体,第一反应就是这不是人做的。。。  
  • 然后去看了一下第二题,第一反应就是一个搜索,然后就发现竟然还有什么传送门,那传送出去之后不还在门上吗,那岂不是永远出不来了?,就随便打了一个最简单的搜索,没看门,竟然还拿了10分。。。
  • 第三题就是毒瘤,题面简单明了,思路也是短小精悍,不会。。。然后开了一个10000*10000的数组不但没爆还拿了10分。。。

第一题的缩小版:

  在一个5000*5000的矩阵里,已知n对(x,y),表示在(x,y)有一个雷神标记,若Xa==Xb并且Ya==Yc则(Xc,Yb)处也会产生一个雷神标记,最后他有一定限制的走,问最大的长或宽是多少

第一题思路:

  一开始乱搞了一个半小时没往正解上去想,然后就看出来了是冰茶姬,而这题的关键就在于怎么把扩展出来的点找出来,至于DP什么的就很水,同样是DP蓝题,和那个妙题包里的根本不在一个档次。。。然后考场上ZYM大佬亲自尝试N2的解法然后就T掉了,回家一路上都在纠结于N2的算法,然后我才想起来哪儿错的。。。。其实这很简单

  • 把行和列分别看成N个点,就形成了一个N*N的点阵。
  • 因为X是1-->maxn,Y也是1--->maxn,所以为了避免重复,Y可以用maxn+1----->maxn+maxn来表示,parent数组要开两倍,不然运气好会有50分,运气不好就不知道会不会有分了。。。
  • 然后举个栗子:假设有我们知道三个点(1,5001),(1,5002),(2,5002)然后画成图就是这样

然后把所有点的坐标都列出来(1,5001)(1,5002)(2,5002)----->(2,5001),仔细一数好像每个数字都出现了俩次,然后如果把每个给定点的坐标都放到一个集合里就可以发现有这么一个集合{1,5001,2,5002},然后把集合里的数排列一下,小于5000的当X,大于5000的当Y,会发现有四个坐标,其中三个是我们已知的,而另外一个就是我扩展出来的点的坐标。

  再举个栗子

对于上面这个图,可以形成{2,5001}和{1,5002,3}两个集合,然而拆开之后就会发现最多只会形成3个点,没有新的点就意味着没有可以扩展出来的新点。

  • 由此我们可以得出结论只要把他给的点都放到一个集合中,然后在之后对整个矩阵遍历的时候判断i和j在不在同一个集合里,如果在一个集合里就会有一个标记,反之亦然。
  • 然后就可以在5000*5000的矩阵里面跑DP,感觉DP也很好想。F【i】【j】表示从原点到(i,j)时的答案。
  • 如果I和J在同一个集合里,说明这个地方有一个标记,此时F【i】【j】=F【i-1】【j-1】+1;因为无论是行还是列从-1传到这里是他最后的答案都要+1;
  • 如果I和J不在同一个集合中,那说明此处没有标记,那此时F【i】【j】=max(F【i-1】【j】,F【i】【j-1】);从上面的一次中无论是行还是列取一个最大值继承到当前点。
  • 最后的答案就是F【maxn】【maxn】。

代码同样也很短:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 inline int read()
 4 {
 5     int x=0,f=1;char c=getchar();
 6     for(;!isdigit(c);c=getchar()) if(c==‘-‘) f=-1;
 7     for(;isdigit(c);c=getchar()) x=x*10+c-‘0‘;
 8     return x*f;
 9 }
10 const int maxn=5000;
11 int parents[maxn*2+50],f[maxn+50][maxn+50];
12 inline int find(int x) {return parents[x]==x?x:parents[x]=find(parents[x]);}
13 int main()
14 {
15     int n=read();
16     for(int i=1;i<=10000;i++) parents[i]=i;
17     for(int i=1;i<=n;i++)
18     {
19         int x=read(),y=read();
20         parents[find(x)]=find(y+maxn);
21     }
22     for(int i=1;i<=maxn;i++)
23     {
24         for(int j=1;j<=maxn;j++)
25         {
26             if(find(i)==find(j+maxn))
27             {
28                 f[i][j]=f[i-1][j-1]+1;
29              }
30             else
31             {
32                 f[i][j]=max(f[i][j-1],f[i-1][j]);
33             }
34
35         }
36     }
37     printf("%d\n",f[maxn][maxn]);
38     return 0;
39 }

原文地址:https://www.cnblogs.com/2529102757ab/p/11444214.html

时间: 2024-11-07 10:57:41

问题 A: 雷神领域的相关文章

测试- 雷神领域

[问题描述] Lwins_7k+ (GYZ),Synophia大陆首屈一指的天才魔法师,创造了一个新魔法:雷神领域.这个魔法会首先在地面上形成正方网格魔法阵列,然后在某些位置召唤雷电轴标.注意:一个位置只能有一个雷电轴标存在.雷电轴标总出现在正方网格魔法阵列的顶点处,所以我们可以用一个有序整数对(x_i,y_i)标记它的位置.然后,如果存在三个雷电轴标A,B,C满足:x_A=x_B, y_A=y_C,则该魔法会立即召唤一个位置在(x_C,y_B)的雷电轴标,如此往复直至不存在满足条件的雷电轴标组

大神刷题表

9月27日 后缀数组:[wikioi3160]最长公共子串 dp:NOIP2001统计单词个数 后缀自动机:[spoj1812]Longest Common Substring II [wikioi3160]最长公共子串 [spoj7258]Lexicographical Substring Search 扫描线+set:[poj2932]Coneology 扫描线+set+树上删边游戏:[FJOI2013]圆形游戏 结论:[bzoj3706][FJ2014集训]反色刷 最小环:[poj1734

浅谈自组网技术在国外军事领域的应用

自组网技术来源于军事通信协同作战需求,随着世界各国军队网络中心战的转型,自组网技术被军队日渐重视,应用于军事通信的各个方面.下面就已知的自组网技术在国外军事领域的用途展开介绍. 战术通信数据链 驱动着军队从“平台中心战”向“网络中心战”转型的技术装备,就是战术数据链.美国防部为了将各军兵种研制的通信装备统一起来,充分利用网络中心战基础设施,成立了联合项目执行办公室,目的是提供一个满足联合战术无线电系统(JTRS)作战需求说明书规范的.波形.接口标准化的软件定义无线电(SDR)战术通信系统,使得装

领域驱动设计-入门

领域驱动设计围绕着对象进行设计,类似于传统的OO,但是还是不同的. 传统的OO更像是贫血的领域对象,它具有数据,很多get set方法,但是缺少业务逻辑.客户端使用时,需要进行一大串的set操作.举个栗子: 这种方式中customer是一个贫血的领域对象,客户端必须进行很多的set,最后调用dao进行保存. --------------- 那么,怎样才是不贫血的领域对象呢?主要看两点:boundedcontext,通用领域语言. 领域对象是通过通用领域语言进行描述的,通用语言是领域专家和开发人员

JetBrains发布DataGrip 1.0——数据库与SQL领域中的瑞士军刀

本文来源于我在InfoQ中文站翻译的文章,原文地址是:http://www.infoq.com/cn/news/2015/12/datagrip-released 近日,来自捷克的软件公司JetBrains发布了全新的重量级产品DataGrip 1.0--号称数据库与SQL领域中的瑞士军刀.DataGrip的前身0xDBE已经发布一年多的时间了,这也是JetBrains向广大用户提供的开发版本,每个版本都有一定的使用期限,过期后用户可以从JetBrains网站上下载新的开发版本.经过了长时间的开

领域驱动设计之实体、值对象、领域服务

建立领域模型的第一步就是需要识别出实体.值对象与领域服务. 一.实体 1.实体是领域中需要唯一标识的领域概念.通常在业务中,需要唯一标识与区分的对象并需要持续对它进行跟踪,这样的对象我们认为是实体. 2.如果两个实体所有状态都一样,但如果标识不一样,就是两个不同实体.比如订单对象就应该是实体,就算两个订单的订单日期.订单总额等信息都一样,只要标识不一样,比如订单号,我们就认为它们是不同的实体. 3.实体只保留必要的属性与行为.比如一个客户实体应该保留客户的基本信息,但像国家.省.城市.街道等信息

Java NIO通信框架在电信领域的实践

Java NIO通信框架在电信领域的实践 此文配图有错,华为电信软件V1版逻辑架构图与华为电信软件V2 MVC版逻辑架构图两张配图是同一张啊 另:我觉得作者在本文中遇到由于同步io引起的历史遗留问题更多的是架构的问题,在作架构时就需要考虑到同步io引起的阻塞问题,我觉得比较好的解决方案是使用排队的方式来下发请求,而不是每次下发请求都启一个线程,这样如果对方还是响应慢的话即使是用nio也是解决不了问题的.

《互联网医疗大棋局》中美移动医疗领域的现状、机会、限制。五星推荐

全书分析中美移动医疗领域的现状.机会.限制.个人感觉水平比较高. 书中几个重要的观点: 1:流量换收入的互联网思维在医疗领域没用. 2:美国与中国在医疗行业有诸多不同:最重要的是奥巴马的医改法案,让医疗界更关注医疗质量而不是门诊手术数量,因而让医疗界有动力去通过技术手段与病人在诊前诊后互动,提高病人的健康水平,也让移动医疗有更多的机会:中国则好医院忙于应付现有病人,没有动力去做移动医疗: 3:美国的许多移动医疗产品,都成功地找到了支付方,有许多是保险公司付费的(依旧归功于奥巴马医改),还有雇主和

医疗时鲜资讯:医疗领域入口的划分

背景: 医疗时鲜资讯系列的出发点是整理和摘录医疗行业的最新资讯,当然不可能只摘录,那我一个人怎能比得上健康界.HC3I--这两个是我有勇气写该系列博文的支撑.近期拜读了医库软件董事长Dr.2的系列文章,深受启发遂决定修改一下该系列博文的角度:以一个医疗设备相关软件开发从业人员的角度来观察医疗行业,从"医院.医生.患者.设备"四个大的方向来整理相关资讯,发表自己的些许感想. 医疗领域的划分(医院.医生.患者.设备): 翻出前段时间博文的一个老图,如下所示.当初画该图的出发点源于"