暑期培训7日游解题思路(day1~day3)
暑期培训7日游解题思路(day1~day3)
day1
第一天,王聿中老师出的题目比较简单,T1很水,T2是个简单的DP,T3还是有一点意思的。在网格图中删掉若干条边,使得所有格子都联通,求删掉的边的长度和最小为多少。很容易发现这是一个最小生成树问题,但点和边数量非常大,不可能完成一般的建图,然后发现这是网格图,同一行的竖边都相等,同一列的横边也都相等。克鲁斯卡尔每次找最短的边e(u,v),若u,v在不同的连通块,则取该边。所以在本题中如果要取某一条边,与它长度相等的边如果可以去就要取,因此每一次可以打通一列或一行,这样只要记录下有几行几列已经被打通,就可以统计出答案。一个对克鲁斯卡尔的变形,也比较容易。1个多小时就把比赛AK了,一共10人AK,不过之后的比赛再也看不到300了。
day2
题目也不算难。
T1依然是水题,想怎么做就怎么做。
T2是一道不错的题目,题目大意:有4组数,每组n个,每组个选一个数组成一个四元组,使得四个数相乘模p等于1,保证p是质数。n<=1000.
最暴力的方法是n^4次枚举,显然不行。这个规模应该要O(n^2)或O(n^2 log n).
也就是说只能枚举两个。于是可以先枚举前面两个,把它们记下来,排序,然后枚举后面两个,求乘积的逆元,在那个有序序列中查询。这样子时间复杂度O(n^2 logn).
这种方法叫做Meeting in the middle,是一个重要的优化方法。
T3是一道有趣的题目,题目大意:一条长度固定的贪吃蛇(l<=8),在n*m的网格图上(n,m<=20),网格图上有k个障碍物(保证l+k<=n*m),任意时刻蛇不能有两节在同一个格子上。给定蛇的每一节的初始位子,问蛇头到目标位置最少要多少时间。
看到数据比较小,大胆地写了一个玄学搜索,加了一些靠谱的小优化,程序跑得飞快,自己出的大数据可以在0.01秒内跑完,以为稳了,打了接近两个小时的扫雷……结果TLE了……50分,还好。
不要玄学这种东西,我们来看正解。蛇当然是连续的(不然怎么活),在网格图中只有4种方向,所以蛇头的位置和每一节弯曲的方向(状压)就可以确定所有的状态。20*20*4^7次,可以接受。写一个宽搜,用一个数组记录每一个状态是否到过,于是一个时间复杂度稳定的算法就出现了。其实还可以优化,但不是很有必要,除了第二个方向,后面每一节都只有三个可能的方向,所以只要20*20*4*3^6个状态。
day3
T1是个模拟题,跳过。
T2比前面两个T2要难得多。题目大意:有一个n*m的网格,每一个格子是“.”或“*”,求一个由“.”的格子组成的矩形周长最大是多少。这道题似乎与这道题差不多(好像是一模一样……)
房屋建造
题目描述
小明是一位有名的建筑师。他买了一块地来建造房子。不幸的是,这块地的地势是会变化的,它有一个可变仰角。
土地的形状是一个长方形,N米宽M米长。它可以被分为N*M个方块(见下图)。小明的房子也是一个长方形,房子的边与土地的边都是平行的。为了房子不会倒塌,小明建房子的土地必须都是同一个地势的。
上图中小明建立房子的其中两种是红色和蓝色覆盖的区域。计算小明可以有多少种方式来建立他的房子。
输入
输入第一行包括两个整数N和M(1≤N,M≤1000)。
接下来的N行中每行包括M个整数ai,j(1≤ai,j≤10^9),表示每一块土地的地势高度。
输出
输出一个整数,表示小明最多有多少种建立房子的方式。
样例输入
5 3
2 2 2
2 2 1
1 1 1
2 1 2
1 2 1
4 3
1 1 1
1 1 1
2 2 2
2 2 2
样例输出
27
36
提示
【数据范围】
20%的测试数据中,N,M≤50。
60%的测试数据中,N,M≤500。
解题思路:预处理出以每一个格子为底的最长的连续“.”的长度a[i][j]。然后枚举每一行,用单调队列预处理出每一个点向左、向右的最长的距离l[j]、r[j],使得距任意离内的a[i][k]>=a[i][j],然后枚举每一个点ans=max(ans,(l[j]+r[j]+1+a[i][j])*2)
暑期培训7日游解题思路(day1~day3)的更多相关文章
- 一道仅有7人通过的超5星微软比赛题目-------解题思路&优秀代码分享,邀你来“找茬儿”
6月23日英雄会平台发布了一道难度为超5星的微软比赛题目,截止活动结束共有300多名编程爱好者参与线上答题,而最终通过者仅有7人,通过率仅为2%.为什么成绩如此出人意料?是因为题目的英文描述难以理解? ...
- Atitit 项目培训与学校的一些思路总结
Atitit 项目培训与学校的一些思路总结 1.1. Overview implet review OIR学习大法1 1.2. "录取流程,对报名者唯一的要求是学习该项目所必须的先修知识和 ...
- n皇后2种解题思路与代码-Java与C++实现
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文主要讲了n皇后问题的解题思路,并分别用java和c++实现了过程,最后,对于算法改进 ...
- 阿里聚安全攻防挑战赛第三题Android PwnMe解题思路
阿里聚安全攻防挑战赛第三题Android PwnMe解题思路 大家在聚安全挑战赛正式赛第三题中,遇到android app 远程控制的题目.我们今天带你一探究竟,如何攻破这道题目. 一.题目 购物应用 ...
- [LeetCode] 16. 3Sum Closest 解题思路
Given an array S of n integers, find three integers in S such that the sum is closest to a given num ...
- [LeetCode] 234. Palindrome Linked List 解题思路
Given a singly linked list, determine if it is a palindrome. Follow up:Could you do it in O(n) time ...
- [LeetCode] 76. Minimum Window Substring 解题思路
Given a string S and a string T, find the minimum window in S which will contain all the characters ...
- [LeetCode] 3Sum 解题思路
Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all un ...
- [LeetCode] Minimum Size Subarray Sum 解题思路
Given an array of n positive integers and a positive integer s, find the minimal length of a subarra ...
随机推荐
- [jzoj]3875.【NOIP2014八校联考第4场第2试10.20】星球联盟(alliance)
Link https://jzoj.net/senior/#main/show/3875 Problem 在遥远的S星系中一共有N个星球,编号为1…N.其中的一些星球决定组成联盟,以方便相互间的交流. ...
- angular.formJson()
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- JavaScript 特效之四大家族(offset/scroll/client/event)
三大系列:offset.scroll.client 事件对象:event(事件被触动时,鼠标和键盘的状态)(通过属性控制) 三大系列都是以DOM元素节点的属性形式存在的. 类比访问关系,也是以 ...
- JavaBean,POJO,VO,DTO的区别和联系
JavaBean 是一种JAVA语言写成的可重用组件.为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器.JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性 ...
- Facebook AI的工业级NLP开源框架—— Pytext
PyText是基于NLP深度学习技术.通过Pytorch构建的建模框架.PyText解决了既要实现快速实验又要部署大规模服务模型的经常相互冲突.并且,Facebook已经采用了使用PyText快速迭代 ...
- WPF气泡样式弹窗效果
页面设计需求,做了一个气泡形状的弹出框,效果如下: 设计思路如下: 1. 使用Path绘制气泡的尖尖,将这个放到顶层: 2. 在用border绘制长方形框,将这个放到底层,并且设置Margin值,使得 ...
- 学习ActiveMQ(八):activemq消息的持久化
1. 持久化方式介绍前面我们也简单提到了activemq提供的插件式的消息存储,在这里再提一下,主要有以下几种方式: AMQ消息存储-基于文件的存储方式,是activemq开始的版本默认的消息存储方式 ...
- TPS6116x 1-wire总线的分析与驱动实现
1-wire总线的特点 1-wire协议是用一条数据线作为总线进行数据通信的协议. 1-wire总线有以下特点: 1. 可以组建网络,个数没有限制. 2. 使用GPIO的特性就可以,不需要专门的控制器 ...
- static与volatile的用法
static 1.概述 static 声明的变量在C语言中有两方面的特征: 1).变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还可以保持原来的赋值.这一点是它与堆栈变量和堆变量的区别 ...
- Python002-操作MSSQL(Microsoft sql server)基础示例(二)
前文http://www.cnblogs.com/fengpingfan/p/7675291.html,讲述了python操作mssql的步骤.环境创建.常用方法等,本文将实例演示python操作ms ...