暑期培训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)的更多相关文章

  1. 一道仅有7人通过的超5星微软比赛题目-------解题思路&优秀代码分享,邀你来“找茬儿”

    6月23日英雄会平台发布了一道难度为超5星的微软比赛题目,截止活动结束共有300多名编程爱好者参与线上答题,而最终通过者仅有7人,通过率仅为2%.为什么成绩如此出人意料?是因为题目的英文描述难以理解? ...

  2. Atitit 项目培训与学校的一些思路总结

    Atitit 项目培训与学校的一些思路总结 1.1. Overview implet review  OIR学习大法1 1.2. "录取流程,对报名者唯一的要求是学习该项目所必须的先修知识和 ...

  3. n皇后2种解题思路与代码-Java与C++实现

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文主要讲了n皇后问题的解题思路,并分别用java和c++实现了过程,最后,对于算法改进 ...

  4. 阿里聚安全攻防挑战赛第三题Android PwnMe解题思路

    阿里聚安全攻防挑战赛第三题Android PwnMe解题思路 大家在聚安全挑战赛正式赛第三题中,遇到android app 远程控制的题目.我们今天带你一探究竟,如何攻破这道题目. 一.题目 购物应用 ...

  5. [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 ...

  6. [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 ...

  7. [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 ...

  8. [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 ...

  9. [LeetCode] Minimum Size Subarray Sum 解题思路

    Given an array of n positive integers and a positive integer s, find the minimal length of a subarra ...

随机推荐

  1. FC105 FC106 Scale功能块使用说明

    有一点不明白,这个跟传感器本身的分辨率什么关系? 为什么定死 极性和非极性的值是7648 和27648 FC105是处理模拟量(1~5V.4~20MA等信号)输入的功能块: 其中管脚的定义如下:IN- ...

  2. codecademy课程笔记——JavaScript Promise

      Promise是一种表示异步操作最终的结果的对象,一个Promise对象有三种状态 Pending: 初始状态 ,操作还未完成 Fullfilled:操作成功完成,且这个promise现在有一个r ...

  3. 剑指offer——python【第59题】按之子形顺序打印二叉树

    题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. 解题思路 这道题其实是分层打印二叉树的进阶版 ...

  4. Spring-注入

    一.Spring的基本介绍:Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建.简单来说,Spring是一个分层的JavaSE/ ...

  5. oracle中查询用户信息

    1.查看所有用户: select * from dba_users; select * from all_users; select * from user_users; 2.查看用户或角色系统权限( ...

  6. 最近发现一个php trim的bug

    用trim 排除字符串两边的 “.”:你会发现“耀.”会出现编码错误问题,导致程序出现错误!代码如下: $a = "王者荣耀."; echo trim($a,".&quo ...

  7. Java代码导入导出 Excel 表格最简单的方法

    import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStrea ...

  8. Bear + Reminders 是完美的Thing 3 的替代品

    如今同类功能的APP在AppStore上呈现泛滥之势,尤其是时间管理.任务管理之类的APP.其中比较出名的就有“Things 3”这款APP,这是一款多年不更新,一更新就获奖的APP.目前在AppSt ...

  9. Ubuntu16.04更新python3.5到python3.7

    下载wget https://www.python.org/ftp/python/3.7.1/Python-3.7.1rc2.tgz 解压tar zxvf Python-3.7.1rc2.tgzcd ...

  10. 队列->队列的应用(银行业务模拟)

    文字描述 示意图 代码实现 // // Created by Zhenjie Yu on 2019-04-13. // #include <stdio.h> #include <st ...