算法回顾
文章平均质量分 65
算法回顾
pxlsdz
冲就完了!
展开
-
状压DP dd爱探险(最短Hamilton路径升级版本)
dd爱探险链接:https://ac.nowcoder.com/acm/contest/11211/B来源:牛客网时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 262144K,其他语言524288K64bit IO Format: %lld题目描述星际中有nn个空间站,任意两个空间站间可以相互跳跃,由空间站x跳跃到空间站y所需要的代价为 P[x][y],注意不保证 p[x][y]= p[y][x],dddd可以任意选择出发的空间站,并通过恰好n−1次跳跃把所有空间站跳完,并且d原创 2021-05-30 16:40:47 · 429 阅读 · 0 评论 -
状压DP 最短Hamilton路径
最短Hamilton路径给定一张 n 个点的带权无向图,点从 0∼n−1 标号,求起点 0 到终点 n−1 的最短 Hamilton 路径。Hamilton 路径的定义是从 0 到 n−1 不重不漏地经过每个点恰好一次。输入格式第一行输入整数 n。接下来 n 行每行 n 个整数,其中第 i 行第 j 个整数表示点 i 到 j 的距离(记为 a[i,j])。对于任意的 x,y,z,数据保证 a[x,x]=0,a[x,y]=a[y,x] 并且 a[x,y]+a[y,z]≥a[x,z]。输出格式输原创 2021-05-30 16:05:55 · 453 阅读 · 0 评论 -
状压DP Leetcode 5756. 两个数组最小的异或值之和
给你两个整数数组 nums1 和 nums2 ,它们长度都为 n 。两个数组的 异或值之和 为 (nums1[0] XOR nums2[0]) + (nums1[1] XOR nums2[1]) + … + (nums1[n - 1] XOR nums2[n - 1]) (下标从 0 开始)。比方说,[1,2,3] 和 [3,2,1] 的 异或值之和 等于 (1 XOR 3) + (2 XOR 2) + (3 XOR 1) = 2 + 0 + 2 = 4 。请你将 nums2 中的元素重新排列,使得原创 2021-05-30 13:19:39 · 216 阅读 · 0 评论 -
牛客小白月赛34
dd爱科学1.0链接:https://ac.nowcoder.com/acm/contest/11211/A来源:牛客网题目描述大科学家dddd最近在研究转基因白菜,白菜的基因序列由一串大写英文字母构成,dddd经过严谨的推理证明发现,只有当白菜的基因序列呈按位非递减形式时,这株白菜的高附加值将达到最高,于是优秀的dddd开始着手修改白菜的基因序列,dddd每次修改基因序列的任意位需要的代价是11,dddd想知道,修改白菜的基因序列使其高附加值达到最高,所需要的最小代价的是多少。输入描述:第一行原创 2021-05-28 23:40:36 · 698 阅读 · 1 评论 -
牛客2020跨年场题解
B 牛牛想起飞题解DP问题,dp[i][j]表示前i个数中是否有%m为j的数,有为1,否则为0。#include<bits/stdc++.h>using namespace std;typedef long long LL;const LL N = 500010, M = 100;int dp[N][M],a[N],b[N];int main(){ LL n, m, res = 0,sum1 = 0; scanf("%lld%lld", &n, &a原创 2021-01-01 13:45:04 · 298 阅读 · 1 评论 -
《剑指Offer》第34-44题
AcWing 46. 二叉搜索树的后序遍历序列输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。样例输入:[4, 8, 6, 12, 16, 14, 10]输出:true题解:中序(二叉搜索树的中序是从小到大的结果)+后序建树后序遍历最后一个数为根,二叉搜索树的性质,我们直接从头开始找到比根小的值,这便是左子树;右边部分便是右子树,如果不符合便是错误。class Solution {pu原创 2020-12-02 14:59:01 · 219 阅读 · 0 评论 -
DP回顾——背包问题
背包问题N 件物品放入容量为 V 的背包,求最大的价值。常见的背包问题分为:01背包问题,完全背包问题其中核心的问题还是 01背包问题,其余的背包问题都是基于01背包的变形。AcWing 2. 01背包问题有 N件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数N,V,用空格隔开,分别表示物品数量和背包容积。接下来有 N 行,每原创 2020-12-02 14:58:14 · 1586 阅读 · 0 评论 -
牛客编程巅峰赛S2第5场
A 牛牛算数链接:https://ac.nowcoder.com/acm/contest/9556/A来源:牛客网题目描述给你一个含有n个元素的数组arr[i],请你告诉牛牛这个数组的中位数大还是平均数大,如果中位数更大输出1,如果平均数更大输出-1,如果中位数和平均数相等输出0示例1输入复制[1,3,4]返回值复制1说明中位数3,平均数约等于2.67,所以输出1示例2输入复制[7,4,8,11]返回值复制0说明中位数7.5,平均数7.5,所以输出0示例3输入原创 2020-12-01 21:26:29 · 287 阅读 · 1 评论 -
牛客编程巅峰赛S2第4场
又没中奖 =_=A 牛牛掷硬币链接:https://ac.nowcoder.com/acm/contest/9475/A来源:牛客网题目描述牛牛最近很喜欢掷硬币,由于他今天很无聊,所以他在家掷了n次硬币,如果这n次硬币全部朝上或者全部朝下牛牛就很开心,请问牛牛开心的概率是多少。(每次掷硬币朝上的概率与朝下的概率相同)示例1输入复制1返回值复制“1.00”说明概率为1,四舍五入保留两位小数的字符串为"1.00"示例2输入复制5返回值复制“0.06”说明概率为0.0原创 2020-12-01 12:49:47 · 202 阅读 · 0 评论 -
解谜游戏(思维)
小明正在玩一款解谜游戏。谜题由 24 根塑料棒组成,其中黄色塑料棒 4 根,红色 8 根,绿色 12 根 (后面用 Y 表示黄色、R 表示红色、G 表示绿色)。初始时这些塑料棒排成三圈,如上图所示,外圈 12 根,中圈 8 根,内圈 4 根。小明可以进行三种操作:将三圈塑料棒都顺时针旋转一个单位。例如当前外圈从 0 点位置开始顺时针依次是 YRYGRYGRGGGG,中圈是 RGRGGRRY,内圈是 GGGR。那么顺时针旋转一次之后,外圈、中圈、内圈依次变为:GYRYGRYGRGGG、YRGRGG原创 2020-11-13 20:57:56 · 841 阅读 · 0 评论 -
字符串A->字符串B例题 :最短编辑距离、最优包含 (线性DP)
AcWing 902. 最短编辑距离给定两个字符串A和B,现在要将A经过若干操作变为B,可进行的操作有:删除–将字符串A中的某个字符删除。插入–在字符串A的某个位置插入某个字符。替换–将字符串A中的某个字符替换为另一个字符。现在请你求出,将A变为B至少需要进行多少次操作。输入格式第一行包含整数n,表示字符串A的长度。第二行包含一个长度为n的字符串A。第三行包含整数m,表示字符串B的长度。第四行包含一个长度为m的字符串B。字符串中均只包含大写字母。输出格式输出一个整数,表示最少操原创 2020-11-13 20:33:40 · 1408 阅读 · 0 评论 -
1583. PAT 计数 (状态机DP)
字符串 APPAPT 中共包含两个 PAT 作为子串。第一个子串由第二,第四和第六个字符组成,第二个子串由第三,第四和第六个字符组成。现在给定一个字符串,请你求出字符串中包含的 PAT 的数量。输入格式共一行,包含一个由大写字母 P,A,T 构成的字符串。输出格式输出字符串中包含的 PAT 的数量。由于结果可能很大,请你输出对 1000000007 取模后的结果。数据范围给定字符串的长度不超过 105。输入样例:APPAPT输出样例:2题解状态机模型S[] = “APPAPT原创 2020-11-12 10:35:39 · 216 阅读 · 0 评论 -
2548. 大胖子走迷宫 (时间bfs)
小明是个大胖子,或者说是个大大胖子,如果说正常人占用 1×1 的面积,小明要占用 5×5 的面积。由于小明太胖了,所以他行动起来很不方便。当玩一些游戏时,小明相比小伙伴就吃亏很多。小明的朋友们制定了一个计划,帮助小明减肥。计划的主要内容是带小明玩一些游戏,让小明在游戏中运动消耗脂肪。走迷宫是计划中的重要环节。朋友们设计了一个迷宫,迷宫可以看成是一个由 n×n 个方阵组成的方阵,正常人每次占用方阵中 1×1 的区域,而小明要占用 5×5 的区域。小明的位置定义为小明最正中的一个方格。迷宫四周都原创 2020-11-11 21:08:19 · 619 阅读 · 2 评论 -
AtCoder Beginner Contest 182 题解
比赛地址A - twiblr直接输出2A+100-B即可,时间复杂度O(1)。a, b = map(int, input().split())print(2 * a + 100 - b)Problem B - Almost GCD暴力穷举即可。IA = lambda: map(int, input().split()) N = 1005cnt = [0 for i in range(N)]n = int(input())a = list(IA())maxx = -1res =原创 2020-11-10 12:42:28 · 470 阅读 · 4 评论 -
《剑指Offer》第23-33题
AcWing 35. 反转链表定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。思考题:请同时实现迭代版本和递归版本。样例输入:1->2->3->4->5->NULL输出:5->4->3->2->1->NULL递推# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self原创 2020-11-05 13:12:18 · 720 阅读 · 0 评论 -
lt 5600. 第 K 条最小指令 (组合数+思维)
第 K 条最小指令思路优先确定高位 + 组合计数首先,此题可以转化为排列h个H和v个V组成字符串集合中,第k小的字符串是哪一个?考虑最高位是放 H 还是 V。由于后者的字典序较大,因此如果最高位放 V,那么所有最高位为H 的字符串的字典序都比它小,这样的字符串共有n = c[h + v - 1][h - 1]个。即就是确定了最高位为 H,剩余 h+v-1个位置中选择 h-1 个放入 H,其余位置自动放入 V 的方案数。因此:如果 k大于这个组合数 n,那么最高位一定是 V。我们将 v 减少 1原创 2020-11-01 22:01:10 · 228 阅读 · 0 评论 -
2020中南大学研究生招生夏令营机试题
title: 2020中南大学研究生招生夏令营机试题date: 2020-05-07 17:34:23categories: 算法tags: [C++, 思维]mathjax: true题目编号标题来源/分类正确提交Y1252缺失的彩虹2020中南大学研究生招生夏令营机试题136334Y1253最小价值和2020中南大学研究生招生夏令营机试题201645Y1254PIPI上学路2020中南大学研究生招生夏令营机试题12158.原创 2020-10-30 21:00:11 · 883 阅读 · 0 评论 -
2019中南大学研究生招生夏令营机试题
title: 2019中南大学研究生招生夏令营机试题date: 2020-04-17 17:34:23categories: 算法tags: [C++, 马拉车, 最短路, dfs]mathjax: true2019中南大学研究生招生夏令营机试题题目编号标题来源/分类正确提交Y1110地砖问题2019中南大学研究生招生夏令营机试题306932Y1111最小花费2019中南大学研究生招生夏令营机试题105454Y1112回文串2.原创 2020-10-30 20:57:56 · 426 阅读 · 0 评论 -
1225. 正则问题(递归)
1225. 正则问题考虑一种简单的正则表达式:只由 x ( ) | 组成的正则表达式。小明想求出这个正则表达式能接受的最长字符串的长度。例如 ((xx|xxx)x|(x|xx))xx 能接受的最长字符串是: xxxxxx,长度是6。输入格式一个由x()|组成的正则表达式。输出格式输出所给正则表达式能接受的最长字符串的长度。数据范围输入长度不超过100,保证合法。输入样例:((xx|xxx)x|(x|xx))xx输出样例:6题解X 表示字符| 表示左右两边都可以,选择一个递原创 2020-10-30 15:40:17 · 190 阅读 · 0 评论 -
扩展欧几里得算法算法例题——1299. 五指山、1301. C 循环
大圣在佛祖的手掌中。我们假设佛祖的手掌是一个圆圈,圆圈的长为 n,逆时针记为:0,1,2,…,n−1,而大圣每次飞的距离为 d。现在大圣所在的位置记为 x,而大圣想去的地方在 y。要你告诉大圣至少要飞多少次才能到达目的地。注意:孙悟空的筋斗云只沿着逆时针方向翻。输入格式有多组测试数据。第一行是一个正整数 T,表示测试数据的组数;每组测试数据包括一行,四个非负整数,分别为如来手掌圆圈的长度 n,筋斗所能飞的距离 d,大圣的初始位置 x 和大圣想去的地方 y。输出格式对于每组测试数据,输出一原创 2020-10-29 20:41:48 · 949 阅读 · 0 评论 -
经典问题——重复覆盖问题
糖果店的老板一共有 M 种口味的糖果出售。为了方便描述,我们将 M 种口味编号 1∼M。小明希望能品尝到所有口味的糖果。遗憾的是老板并不单独出售糖果,而是 K 颗一包整包出售。幸好糖果包装上注明了其中 K 颗糖果的口味,所以小明可以在买之前就知道每包内的糖果口味。给定 N 包糖果,请你计算小明最少买几包,就可以品尝到所有口味的糖果。输入格式第一行包含三个整数 N,M,K。接下来 N 行每行 K 这整数 T1,T2,⋅⋅⋅,TK,代表一包糖果的口味。输出格式一个整数表示答案。如果小明无法原创 2020-10-29 19:54:04 · 1644 阅读 · 0 评论 -
算术基本定理例题—— X的因子链、聪明的燕姿
1295. X的因子链输入正整数 X,求 X 的大于 1 的因子组成的满足任意前一项都能整除后一项的严格递增序列的最大长度,以及满足最大长度的序列的个数。输入格式输入包含多组数据,每组数据占一行,包含一个正整数表示 X。输出格式对于每组数据,输出序列的最大长度以及满足最大长度的序列的个数。每个结果占一行。数据范围1≤X≤220输入样例:23410100输出样例:1 11 12 12 24 6题解:由算术基本定理得:所有正整数都可以分解成质因子乘积的形式,N=P原创 2020-10-29 10:46:47 · 442 阅读 · 0 评论 -
公约数例题——等差数列、最大比例
1246. 等差数列数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一部分的数列,只记得其中 N 个整数。现在给出这 N 个整数,小明想知道包含这 N 个整数的最短的等差数列有几项?输入格式输入的第一行包含一个整数 N。第二行包含 N 个整数 A1,A2,⋅⋅⋅,AN。(注意 A1∼AN 并不一定是按等差数列中的顺序给出)输出格式输出一个整数表示答案。数据范围2≤N≤100000,0≤Ai≤109输入样例:52 6 4 10 20输出样例:10样例解释包含原创 2020-10-28 15:33:28 · 504 阅读 · 0 评论 -
《剑指Offer》第12-22题
AcWing 24. 机器人的运动范围地上有一个 m 行和 n 列的方格,横纵坐标范围分别是 0∼m−1 和 0∼n−1。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格。但是不能进入行坐标和列坐标的数位之和大于 k 的格子。请问该机器人能够达到多少个格子?样例1输入:k=7, m=4, n=5输出:20样例2输入:k=18, m=40, n=40输出:1484解释:当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它原创 2020-10-27 19:06:42 · 769 阅读 · 0 评论 -
《剑指Offer》第1-11题
AcWing 13. 找出数组中重复的数字给定一个长度为 n 的整数数组 nums,数组中所有的数字都在 0∼n−1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。注意:如果某些数字不在 0∼n−1 的范围内,或数组中不包含重复数字,则返回 -1;样例给定 nums = [2, 3, 5, 4, 3, 2, 6, 7]。返回 2 或 3。from collections import defaultdictclass原创 2020-10-23 10:01:16 · 365 阅读 · 0 评论 -
DP经典问题的python实现
title: DP经典问题的python实现date: 2020-03-26 22:13:26categories: 算法tags: [python, DP]01背包有 N件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数N,V,用空格隔开,分别表示物品数量和背包容积。接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分.原创 2020-10-23 09:55:22 · 1107 阅读 · 0 评论 -
质数相关问题的python实现
title: 质数相关问题的python实现date: 2020-04-12 18:26:26categories: 算法tags: [python, 质数]筛质数(三种筛法)给定一个正整数n,请你求出1~n中质数的个数。输入格式共一行,包含整数n。输出格式共一行,包含一个整数,表示1~n中质数的个数。数据范围1≤n≤1061≤n≤106输入样例:8输出样例:4代码IAS=lambda:map(str,input().split())IA=lambda:map(.原创 2020-10-22 10:51:47 · 674 阅读 · 0 评论 -
树状数组与线段树经典问题的python实现
title: 树状数组与线段树经典问题的python实现date: 2020-03-26 22:13:26categories: 算法tags: [python, 树状数组与线段树]树状数组作用:单点修改,区间求和时间复杂度:修改和查询的复杂度都是O(logN)要点:lowbit(x)=x&(−x)=2klowbit(x)=x\&(-x) =2^{k}lowbit(x)=x&(−x)=2kk:x在二进制位下面末尾连续0的个数原理:利用的负数的存储特性.原创 2020-10-22 10:50:52 · 446 阅读 · 0 评论 -
经典思维问题的python实现
title: 经典思维问题的python实现date: 2020-03-27 23:13:26categories: 算法tags: [python, 经典思维]蚂蚁感冒长 100100 厘米的细长直杆子上有 nn 只蚂蚁。它们的头有的朝左,有的朝右。每只蚂蚁都只能沿着杆子向前爬,速度是 11 厘米/秒。当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行。这些蚂蚁中,有 11 只蚂蚁感冒了。并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁。请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂.原创 2020-10-22 10:49:01 · 177 阅读 · 0 评论 -
简单数学问题的python实现
title: 简单数学问题的python实现date: 2020-03-27 22:13:26categories: 算法tags: [python, 简单数学]买不到的数目小明开了一家糖果店。他别出心裁:把水果糖包成4颗一包和7颗一包的两种。糖果不能拆包卖。小朋友来买糖的时候,他就用这两种包装来组合。当然有些糖果数目是无法组合出来的,比如要买 10 颗糖。你可以用计算机测试一下,在这种包装情况下,最大不能买到的数量是17。大于17的任何数字都可以用4和7组合出来。本题的要求就.原创 2020-10-22 10:46:41 · 281 阅读 · 0 评论 -
复杂DP经典问题的python实现
title: 复杂DP经典问题的python实现date: 2020-05-10 22:13:26categories: 算法tags: [python, DP]整数划分一个正整数nn可以表示成若干个正整数之和,形如:n=n1+n2+…+nkn=n1+n2+…+nk,其中n1≥n2≥…≥nk,k≥1n1≥n2≥…≥nk,k≥1。我们将这样的一种表示称为正整数n的一种划分。现在给定一个正整数n,请你求出n共有多少种不同的划分方法。输入格式共一行,包含一个整数n。输出格式共一行,包含一.原创 2020-10-22 10:44:35 · 465 阅读 · 0 评论 -
数论基础知识点
快速幂求ak%Pa^k \%Pak%P,时间复杂度o(log(k))o(log(k))o(log(k))LL qmi(int a, int b, int p){ LL res = 1 % p; while (b) { if (b & 1) res = res * a % p; a = a * (LL)a % p; b >>= 1; } return res;}应用:求逆元假如a/b&原创 2020-10-16 20:13:12 · 846 阅读 · 1 评论