0x00 基本算法
文章平均质量分 65
二分算法、贪心算法、前缀和、差分、递推和递归
默_silence
记得一定要努力,不然往后余生,做饭是你,洗衣是你,做家务是你……是你是你还是你
展开
-
数列比较(结构体排序)
题目描述输入输出样例输入2101 4 1 5 9 2 6 5 3 51 4 2 7 8 2 8 6 3 5101 1 4 5 9 2 6 5 3 51 4 2 7 8 2 8 6 3 5样例输出YesNoxdlyyds!要在保证a有序的同时保证b有序用a和b来组成一个结构体,对a排序后判断b是否有序当a相等时,b是乱序的,所以需要对b进行排序#include <bits/stdc++.h>using namespace std;const int原创 2021-07-08 17:57:11 · 272 阅读 · 0 评论 -
蛇形填数(C语言)
文章目录蛇形填数DescriptionInputOutputSample InputSample Output蛇形矩阵题目描述输入描述输出描述样例输入样例输出蛇形填数Description在n*n方陈里填入1,2,…,n*n,要求填成蛇形。例如n=4时方陈为:10 11 12 19 16 13 28 15 14 37 6 5 4Input直接输入方陈的维数,即n的值。(n<...原创 2019-08-17 21:21:27 · 1115 阅读 · 0 评论 -
特殊的进制转换
小明用字母 A 对应数字 1,B 对应 2,以此类推,用 Z 对应 26。对于 27 以上的数字,小明用两位或更长位的字符串来对应,例如 AA 对应 27,AB 对 应 28,AZ 对应 52,LQ 对应 329。 请问 2019 对应的字符串是什么?遇到类似的题目好多次了,每次都做不上来,总结一下想一下,十进制数如何得到每一位上的数字?首先把n对10取余,得到每一位上的数字,再除以10…直到n变成0while (n > 0) { s[idx++] = n % 10; n /= 10;.原创 2020-10-18 07:59:25 · 543 阅读 · 0 评论 -
快速排序简介及代码模板
快速排序是对冒泡排序的改进,基本思想是基于分治法来减少交换次数# 基本步骤1、先找一个基准元素,通常是第一个元素2、将小于基准元素的数都移动到它的左边,大于基准元素的数都移动到它的右边。此时,基准元素位于它最终的位置3、对基准元素左右两个分块重复以上的步骤,直到全部有序。# 时间复杂度如果每次能够将数组划分为两个区间,总共需要进行 logn 趟排序,所以平均复杂度为 O(nlogn)。# 空间复杂度因为快速排序是递归的形式,如果每次能够将数组划分为两个区间,会递归 logn 层,此时平均复杂度为O(log原创 2020-07-17 09:54:46 · 198 阅读 · 0 评论 -
P3799 妖梦拼木棒
四根拼成正三角形,一定是前两根相等,剩下两根相加等于前两根的长度进行枚举即可,耗时559ms#include <cstdio>#include <algorithm>using namespace std;const int N = 5e3 + 5, M = 1e9 + 7;typedef long long ll;ll a[N];ll ans;...原创 2020-04-11 13:11:20 · 360 阅读 · 0 评论 -
P1088 火星人
emmm,一开始毫无头绪,然后看了一下题解,好吧,I am so vegetable题解链接:https://blog.csdn.net/weixin_42859413/article/details/88362050#include <iostream>#include <algorithm>using namespace std;const int N = 1...原创 2020-04-10 12:31:07 · 127 阅读 · 0 评论 -
P1990 覆盖墙壁
题目链接:https://www.luogu.com.cn/problem/P1990?contestId=28768一开始先打表找规律n012345…n覆盖方法11251124…f[i-1]+f[i-2]+2*sum[i-3]emmm,无意中发现递推公式是f[n]=f[i−1]+f[i−2]+2∗sum[i−3]f[n]=f[i-1...原创 2020-04-09 14:12:42 · 695 阅读 · 0 评论 -
在一个字符串中查找三个字符出现次数(可拆开)
说能过那是假的吉首大学2019年程序设计竞赛(重现赛) G题链接:https://ac.nowcoder.com/acm/contest/992/G题目描述这道题你只需要呆萌呆萌的把下面的代码交上去就行了,我书读的多,不会骗你的,我发4。#include<stdio.h>#include<string.h>int main(){ char ch[10...原创 2019-07-14 14:52:12 · 713 阅读 · 0 评论 -
尺取法模板
尺取法,也叫双指针,是一种O(n)复杂度的算法,通过调整区间的左右端点,来找到满足要求的区间@[tocSubsequenceDescriptionA sequence of N positive integers (10 < N < 100 000), each of them less than or equal 10000, and a positive integer S (S < 100 000 000) are given. Write a program to f...原创 2019-05-03 15:58:24 · 251 阅读 · 0 评论 -
D - Y2K Accounting Bug
DescriptionAccounting for Computer Machinists (ACM) has sufferred from the Y2K bug and lost some vital data for preparing annual report for MS Inc.All what they remember is that MS Inc. posted a sur...原创 2019-04-11 12:36:42 · 302 阅读 · 0 评论 -
B - The Pilots Brothers' refrigerator
DescriptionThe game “The Pilots Brothers: following the stripy elephant” has a quest where a player needs to open a refrigerator.There are 16 handles on the refrigerator door. Every handle can be in...原创 2019-04-09 19:24:14 · 142 阅读 · 0 评论 -
P1106 删数问题(贪心)
题目链接:https://www.luogu.com.cn/problem/P1106?contestId=28697发现了我是多么的菜不能直接删除最大的k个数,比如15324删去2个数字,如果直接删去最大的4、5则会是132,但正确答案是124贪心的思路:每次删除均使当前数字变成最小的数字1)当前数字不是严格递增时,当前数字比下一个数字大,那么就删除当前数字,能使数字变得最小2)如...原创 2020-04-07 13:16:30 · 465 阅读 · 0 评论 -
洛谷题单【算法1-6】二分查找与二分答案
文章目录P2249 【深基13.例1】查找P1873 砍树P1678 烦恼的高考志愿P2440 木材加工P2678 [NOIP2015 提高组] 跳石头P3853 [TJOI2007]路标设置P1182 数列分段 Section II二分算法:https://blog.csdn.net/weixin_43772166/article/details/105307762P2249 【深基13.例1】查找使用STL即可#include <iostream>#include <cstd原创 2021-02-16 20:23:13 · 630 阅读 · 2 评论 -
iko和她的糖(贪心算法)
链接:https://ac.nowcoder.com/acm/problem/15891来源:牛客网题目描述iko超级超级喜欢吃糖,有一天iko想出去玩,她计划从1点走到N点(按1,2,3,…,n的顺序走),每个点都有一个补给站,第i点的补给站有a[i]颗糖,从i点走到i+1点会消耗掉b[i]颗糖,iko在出游的途中可以选择三个补给站,iko想知道她走完全程到达N点时口袋里最多还能剩下几颗糖(初始时iko的口袋里一颗糖都没有)。输入描述:第一行输入N(3<=N<=1000)第二行输入原创 2020-06-28 21:09:37 · 438 阅读 · 0 评论 -
二分算法简介及代码模板
二分算法的思想是:有一个原始的区间,每次取中点进行判断,并删去区间的一半,直到区间的左右端点相等,此时区间的左右端点即为答案二分算法常用来求解**具有单调性**的问题,比如:①在原始区间中,左边一段满足条件,右边一段不满足条件,可以利用二分算法来求解满足条件的最大值②在原始区间中,左边一段不满足条件,右边一段满足条件,可以利用二分算法来求解满足条件的最小值可以计算出它的时间复杂度为 O(logn),是一种很高效的算法原创 2020-04-04 12:22:43 · 628 阅读 · 2 评论 -
P1182 数列分段 Section II(二分)
题目描述对于给定的一个长度为N的正整数数列 A1∼NA_{1\sim N}A1∼N ,现要将其分成 M(M≤N)M(M≤N)M(M≤N)段,并要求每段连续,且每段和的最大值最小。关于最大值最小:例如一数列 4 2 4 5 14\ 2\ 4\ 5\ 14 2 4 5 1要分成 33 段。将其如下分段:[4&n...原创 2020-04-02 14:45:54 · 457 阅读 · 4 评论 -
最大平均数子列(best cow fences) (二分)
题目背景为了让俱乐部的孩子们放假在家学习,mxj特地为俱乐部的孩子们准备了一个winter camp, 在举办之前,mxj想让大家热热身,于是让大家报出了自己收到的压岁钱数,并排成了一个正整数序列A。题目描述mxj会给你一个长度len,让你从这个整数序列A中找到长度大于等于len且平均数最大的一个连续的子序列。输入输出格式输入格式:第一行,一个正整数N,表示俱乐部人数,一个正整数len...原创 2019-02-23 21:43:30 · 1755 阅读 · 0 评论 -
洛谷T68695 mxj的新年礼物(糖果传递)
题目背景在新的一年,mxj给俱乐部的孩子们准备了一堆的礼物,它生成了一个随机数列表a,使得第i个人会得到a[i]件礼物。但是,因为某些人得到的礼物太多,为了公平起见,mxj建议大家把礼物平均分配。题目描述大家围成了一个圈,每个人可以向他左边或者右边的人传递礼物,问,至少传递多少件礼物,才能让每个人得到的礼物件数相同呢?(保证礼物总数是人数n的倍数)输入输出格式输入格式:第一行输入一...转载 2019-02-22 21:40:33 · 414 阅读 · 0 评论 -
耍杂技的牛(贪心)
农民约翰的N头奶牛(编号为1…N)计划逃跑并加入马戏团,为此它们决定练习表演杂技。奶牛们不是非常有创意,只提出了一个杂技表演:叠罗汉,表演时,奶牛们站在彼此的身上,形成一个高高的垂直堆叠。奶牛们正在试图找到自己在这个堆叠中应该所处的位置顺序。这N头奶牛中的每一头都有着自己的重量Wi以及自己的强壮程度Si。一头牛支撑不住的可能性取决于它头上所有牛的总重量(不包括它自己)减去它的身体强壮程度的值,现在称该数值为风险值,风险值越大,这只牛撑不住的可能性越高。您的任务是确定奶牛的排序,使得所有奶牛的风险原创 2021-02-03 23:28:34 · 249 阅读 · 4 评论 -
二分
102. 最佳牛围栏#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 1e5 + 5;double a[N], b[N], sum[N];//原序列,减去mid后的序列,前缀和序列int main(void)...原创 2020-01-20 14:05:10 · 112 阅读 · 0 评论 -
总结与练习
116. 飞行员兄弟这道题要用一个16位的二进制数来进行枚举,每一位用来表示相应位置的开关是否要进行操作按照相应的数字来进行对开关进行操作,最后需要判断开关是否全部关闭每次操作完之后,要将矩阵恢复成最初的状态#include <iostream>#include <cstring>#include <algorithm>using name...原创 2020-01-18 23:44:27 · 193 阅读 · 0 评论 -
排序
103. 电影一开始程序各种超时,后来把map改成了unordered_map就好了一开始使用unordered_map头文件报错了,解决方法:https://www.cnblogs.com/llllrj/p/9510239.html#include <bits/stdc++.h>using namespace std;#if(__cplusplus == 201...原创 2020-01-14 22:54:46 · 301 阅读 · 0 评论 -
前缀和与差分
99. 激光炸弹#include <cstdio>#include <iostream>#include <algorithm>using namespace std;const int N = 5005;int g[N][N];int main(void){ int n, r; int x, y, w; cin >> ...原创 2020-01-14 16:32:18 · 279 阅读 · 0 评论 -
位运算
89 .a^b一开始被一组数据卡了,当b是0,c是1时,需要额外取一次模。#include<stdio.h>int main(){ int a,b,c; long long int ans,base; scanf("%d%d%d",&a,&b,&c); ans=1; base=a%c; while(...原创 2019-08-06 17:51:15 · 148 阅读 · 0 评论 -
递推与递归
92. 递归实现指数型枚举#include<stdio.h>int n,arr[20];void dfs(int i,int index){ if(i==n) { for(int j=0;j<index;j++) printf("%d ",arr[j]); printf("\n"); return; } dfs(i+1,index); ar...原创 2019-08-08 19:49:13 · 337 阅读 · 0 评论