本周的周赛题目质量不是很高,因此只给出最后两题题解(懒)。

1552 两球之间的磁力 #二分答案

题目链接

题意

n个空篮子,第i个篮子位置为position[i],现希望将m个球放到这些空篮子,使得任意两球间最小磁力最大。(其中,磁力简化为两点位置之差)

分析

该题是二分答案的裸题,详细见代码

class Solution {
public:
bool Judge(vector<int>& a, int x, int m){
int cnt = 1,lastpos = a[0];
for (int i = 1; i < (int)a.size(); i++){
if(a[i] - lastpos >= x){ //两点间距是否大于答案x
cnt++;
lastpos = a[i];
}
if(cnt == m) return true;
}
return false;
}
int maxDistance(vector<int>& position, int m) { //该二分算法,是考虑[1, n+1)
sort(position.begin(), position.end()); //记得先排序!!!
int lo = 0x3f3f3f3f;
int hi = position[position.size() - 1] - position[0] + 1; //确定两个篮子最大间距,为二分的上界,注意要+1!!!
for (int i = 1; i < (int)position.size(); i++){
int delt = position[i] - position[i - 1]; //确定两个篮子的最小间距,为二分的下界
lo = min(delt, lo);
}
while(lo < hi){
int mid = (lo + hi) >> 1;
if(Judge(position, mid, m)) //估计答案
lo = mid + 1; //答案可以再高一些
else
hi = mid; //说明该答案下的间距无法将所有球放完
}
return lo-1;
}
};

1553 吃掉N个橘子的最少天数 #记忆化搜索

题目链接

题意

给定n(<= 2e9)个橘子,每一天你只能从以下三种方案中选择一种:

  • 吃掉一个橘子
  • 若剩余橘子数n能被2整除,那么你可以吃掉n/2个橘子
  • 若剩余橘子数n能被3整除,那么你可以吃掉2*(n/3)个橘子

现要求吃掉这n个橘子的最少天数。

分析

容易知道,当n>3时,吃掉n/2个橘子,剩余橘子数即为n/2;吃掉2*(n/3)个橘子,剩余橘子树即为n/3

那我们先预处理,将n$\leq$3的情况记录下来。接下来考虑转移方程。

起初我考虑有三个转移方向:n-1n/2n/3,并用数组记忆化。在如此庞大的数据范围,不但数组无法承受,而且会分出更多的子问题。

为了应对空间问题,可以考虑用map来记忆化。

为了应对时间问题,我们分析到,对于当前剩余橘子数n

  • 方案二分析:\(n\ Mod\ 3 = 0, 1, 2\),余数为0,显然吃掉n/3个橘子即可;余数为1时,说明我们需要用n/3天的时间将3的倍数个橘子吃完,最后剩下一个橘子,需要1天;同理,余数为2时,说明我们用n/3天将3的倍数个橘子吃完后,还需要用两天时间(使用方案一)将剩下2个橘子吃完。
  • 方案三如方案二分析同理,我们要用n/2将2的倍数个橘子吃完后,还需要\(n\ Mod\ 2\)天(使用方案一,且已经预处理过)吃掉剩余的橘子。

因此,我们只需要交给程序去考虑当前的n是选择方案二更优还是方案三,自顶而下向下递归。无需再考虑n-1的方向,同时无需考虑当前的n是否被3整除/被2整除。转移方程见下方代码。

class Solution {
private:
unordered_map<int, int> dp;
public:
int minDays(int n) {
if(n == 1) return dp[1] = 1;
else if(n == 2) return dp[2] = 2;
else if(n == 3) return dp[3] = 2;
else if(dp.count(n)) return dp[n];
else return dp[n] = min(minDays(n / 3) + 1 + n % 3,
minDays(n / 2) + 1 + n % 2); }
};

在笔记本最后几点电量写完题解qaq

Leetcode 周赛#202 题解的更多相关文章

  1. LeetCode周赛#204 题解

    1566. 重复至少 K 次且长度为 M 的模式 #模拟 题目链接 题意 给定正整数数组 arr,请你找出一个长度为 m 且在数组中至少重复 k 次的模式. 模式 是由一个或多个值组成的子数组(连续的 ...

  2. LeetCode周赛#203 题解

    1561. 你可以获得的最大硬币数目 #贪心 题目链接 题意 有 3n 堆数目不一的硬币,你和你的朋友们打算按以下方式分硬币: 每一轮中,你将会选出 任意 3 堆硬币(不一定连续). Alice 将会 ...

  3. Leetcode 周赛#201 题解

    1545 找出第N个二进制字符串的第K位 #分治 题目链接 题意 给定正整数\(n(\leq 20)\)与\(k\),二进制串\(S_n\)形成规则有: \(S_1 = "0"\) ...

  4. Leetcode 周赛#200 题解

    1535 找出数组游戏的赢家 #模拟+优化 题目链接 题意 给你一个由 不同 整数组成的整数数组 arr 和一个整数 k(\(1\leq k\leq1e9\)) .每回合游戏都在数组的arr[0] 和 ...

  5. LeetCode双周赛#33 题解

    5480. 可以到达所有点的最少点数目 #贪心 题目链接 题意 给定有向无环图,编号从0到n-1,一个边集数组edges(表示从某个顶点到另一顶点的有向边),现要找到最小的顶点集合,使得从这些点出发, ...

  6. Leetcode 双周赛#32 题解

    1540 K次操作转变字符串 #计数 题目链接 题意 给定两字符串\(s\)和\(t\),要求你在\(k\)次操作以内将字符串\(s\)转变为\(t\),其中第\(i\)次操作时,可选择如下操作: 选 ...

  7. 【Leetcode周赛】从contest-111开始。(一般是10个contest写一篇文章)

    Contest 111 (题号941-944)(2019年1月19日,补充题解,主要是943题) 链接:https://leetcode.com/contest/weekly-contest-111 ...

  8. 【Leetcode周赛】从contest-41开始。(一般是10个contest写一篇文章)

    Contest 41 ()(题号) Contest 42 ()(题号) Contest 43 ()(题号) Contest 44 (2018年12月6日,周四上午)(题号653—656) 链接:htt ...

  9. 【Leetcode周赛】从contest-51开始。(一般是10个contest写一篇文章)

    Contest 51 (2018年11月22日,周四早上)(题号681-684) 链接:https://leetcode.com/contest/leetcode-weekly-contest-51 ...

随机推荐

  1. kong in kubernetes

    网关 这里提到的网关特指API网关.API网关是在微服务架构的演进过程中产生的,其核心功能是聚合后端服务,为客户端调用提供统一的门户.由于网关的集中式管理,在其上又衍生了限流.负载.路由管理.安全防护 ...

  2. 把 Console 部署成 Windows 服务,四种方式总有一款适合你!

    一:背景 1. 讲故事 上周有一个项目交付,因为是医院级项目需要在客户的局域网独立部署. 程序: netcore 2.0,操作系统: windows server 2012,坑爹的事情就来了, net ...

  3. Learn day4 函数参数\变量\闭包\递归

    1.函数描述 # ### 函数 """ (1)函数的定义: 功能 (包裹一部分代码 实现某一个功能 达成某一个目的) (2)函数特点: 可以反复调用,提高代码的复用性,提 ...

  4. Charles使用part1——基本功能介绍

    一. 安装与破解: 官网地址:https://www.charlesproxy.com/download/ 破解自行解决. 二. 启动与配置: 启动 Charles 后,第一次 Charles 会请求 ...

  5. POJ2430 Lazy Cows

    题意描述 Lazy Cows 给定一个 \(2\times b\) 的矩形,和 \(n\) 个矩形上的点. 要求你用 \(k\) 个矩形覆盖这 \(n\) 个点,使得每个点都被覆盖的前提下这些矩形的面 ...

  6. Windows Server 2012 R2 辅助域控制器搭建

    Windows Server 2012 R2 辅助域控制器搭建 以下操作都是基于主域已搭建成功的基础上,全程操作过程都是在辅域上操作完成. 地址 主域:10.228.81.207 辅域:10.228. ...

  7. JavaMail 发送邮件出现 Connection reset 问题

    问题描述 使用 java mail 发送邮件的时候,申请的 163 邮箱作为发件箱,然无论如何配置,均出现 Connection reset,无法正常发送邮件. Exception in thread ...

  8. 070_GUI编程

    目录 简介 图形用户界面 Graphical User Interface,简称 GUI,又称图形用户接口 GUI核心技术:Swing AWT 不再流行的原因 为什么学习 AWT AWT(Abstra ...

  9. php判断手机浏览器和pc浏览器

    <?php public function is_mobile(){ // returns true if one of the specified mobile browsers is det ...

  10. [MIT6.006] 16. Dijkstra

    先回顾下上节课的内容: 下面来看一个定理:对于所有的点来说,放松操作总是满足 d[v] ≥ δ(s, v).即点s到点v的最短路径总是小于或等于当前点d的路径权重.证明如下: 在正是进入复杂的图前,先 ...