算法竞赛基础
文章平均质量分 76
算法竞赛基础知识和算法总结。
指尖侠
热爱可抵漫长岁月
展开
-
Java洛谷P1102 A-B 数对-Map用法
目录1、洛谷P1102 A-B 数对2、JDK1.6 API中的Map方法3、Map用法实例1、洛谷P1102 A-B 数对OJ:https://www.luogu.com.cn/problem/P1102 标签:模拟,数论,数学,排序,二分查找,哈希,HASH,概率论,统计package 二分查找与二分答案;/* * 这一题将A-B=C转换成A=B+C,首先将A数组每个元素出现的次数统计起来,用map映射, * 答案每次加上a[i]+c位置的数的个数,a[i]+c即..原创 2021-03-26 18:34:03 · 798 阅读 · 2 评论 -
判断质数-洛谷P5723 【深基4.例13】质数口袋
知识点:质数判断方法。#include<iostream>using namespace std;int zhishu(int x){ //判断是否为质数 for(int i=2;i*i<=x;i++){ //对2到根号x求余 if(i%2==0&&i!=2) continue; //偶数肯定是非质数,这步是优化 if(x%i==0)return 0; } return 1;}int main(){ int i,L,j,sum=0,c.原创 2020-07-11 17:34:45 · 1730 阅读 · 0 评论 -
洛谷【入门4】数组-P2615 神奇的幻方
标签:模拟,枚举,暴力,NOIp提高组,2015 知识点:数组应用案例 题目: AC代码: #include<iostream>using namespace std;int main(){ int n,a[39][39]={0},i,j,k; cin>>n; a[0][n/2]=1; i=0;j=n/2; for(k=2;k<=n*n;k++){ if(i==0&&j<n-1){a[n-1][++j]=k;i=n-1;原创 2020-07-12 11:44:19 · 305 阅读 · 0 评论 -
洛谷【入门5】字符串-P1308 统计单词数
标签:模拟、字符串、NOIp普及组、高性能 知识点:getline输入字符串 题目: AC代码: #include<iostream>#include<string>#include<cstring>using namespace std;int main(){ string a,b; int i,cnt=0,begin; getline(cin,a); //字符串含有空格输入,不可以用cin,否则to me只能读.原创 2020-07-17 22:13:54 · 334 阅读 · 2 评论 -
C++的sort()函数的用法详解
为什么要用c++标准库里的排序函数 sort()函数是c++一种排序方法之一,学会了这种方法也打消我学习c++以来使用的冒泡排序和选择排序所带来的执行效率不高的问题!因为它使用的排序方法是类似于快排的方法,时间复杂度为n*log2(n),执行效率较高! c++标准库里的排序函数的使用方法 sort函数包含在头文件为#include<algorithm>的c++标准库中,调用标准库里的排序方法可以不必知道其内部是如何实现的,只要出现我们想要的结果即可! c ...原创 2020-08-12 16:03:05 · 3442 阅读 · 0 评论 -
数列分段-二分
题目链接数列分段描述对于给定的一个长度为N的正整数数列A[1..N]A[1..N],现要将其分成MM(M≤NM≤N)段,并要求每段连续,且每段和的最大值最小。关于最大值最小:例如一数列4 2 4 5 1要分成3段。将其如下分段:[4 2] [4 5] [1]第一段和为6,第2段和为9,第3段和为1,和最大值为9。将其如下分段:[4] [2 4] [5 1]第一段和为4,第2段和为6,第3段和为6,和最大值为6。并且无论如何分段,最大值不会小于6。所以可以得到要将数.原创 2020-08-11 17:28:40 · 738 阅读 · 0 评论 -
网线主管-二分
网线主管描述仙境的居民们决定举办一场程序设计区域赛。裁判委员会完全由自愿组成,他们承诺要组织一次史上最公正的比赛。他们决定将选手的电脑用星形拓扑结构连接在一起,即将它们全部连到一个单一的中心服务器。为了组织这个完全公正的比赛,裁判委员会主席提出要将所有选手的电脑等距离地围绕在服务器周围放置。为购买网线,裁判委员会联系了当地的一个网络解决方案提供商,要求能够提供一定数量的等长网线。裁判委员会希望网线越长越好,这样选手们之间的距离可以尽可能远一些。该公司的网线主管承接了这个任务。他知道库存中每.原创 2020-08-10 16:46:36 · 620 阅读 · 0 评论 -
二分查找数
二分查找二分搜索,也称折半搜索、二分查找,是用来在一个有序数组中查找某一元素的算法。以在一个升序数组中查找一个数为例。它每次考察数组当前部分的中间元素,如果中间元素刚好是要找的,就结束搜索过程;如果中间元素小于所查找的值,那么左侧的只会更小,不会有所查找的元素,只需要到右侧去找就好了;如果中间元素大于所查找的值,同理,右侧的只会更大而不会有所查找的元素,所以只需要到左侧去找。在二分搜索过程中,每次都把查询的区间减半,因此对于一个长度为n的数组,至多会进行O(logn)次查找。.原创 2020-08-09 18:12:23 · 332 阅读 · 0 评论 -
括号序列 (差分数组)
思路见注释。#include<stdio.h>//uncle-lu#include<string.h>//利用差分来找是否有未配对)在(前面的: 若有则flag[i]大于等于零char line[10010];int flag[10010];int main(){ scanf("%s", line + 1); int len = strlen(line + 1); for (int i = 1; i <= len; ++i){ if (line.原创 2020-08-08 19:04:20 · 458 阅读 · 1 评论 -
汉诺塔-递归 详解
思路在注释里写的很清楚就不多说了,不明白的地方欢迎留言。#include<stdio.h>//uncle-lu#include<iostream>using namespace std;//汉诺塔问题是将问题化简为更简单的问题。当你需要从A到C挪n(n>=2)个的时候,你应该先把上面n-1个挪到B上,然后再把第n个挪到C上,再把B上的n-1个挪回C//可以发现这是有边界的,当n==1时直接移动就可以了。所以我们直接找出一个挪n个的方法就可以了,然后处理好边界。.原创 2020-08-04 22:39:40 · 570 阅读 · 0 评论 -
自然数拆分问题(递归)
#include<stdio.h>int n, top;int line[100];//我们利用n,保存当前n所剩没有加过的值,然后对当前所剩数进行搜索void func(int last){//当前操作的数值为last if(n == 0){ if(top==1)return;//objective 3如何利用top判断前面一项把n全用完了的状态?而且,如果第一项n就用完了,根据题意我们应该怎么操作? printf("%d",line[1]);//思考:为什么不直接把l...原创 2020-08-02 12:09:26 · 2168 阅读 · 0 评论 -
全排列(dfs、递归)通俗易懂
dfs算法在蓝桥杯是高频考点,下面是我写的第一个dfs题目,是基本的dfs模板题,但是我想了很久才搞明白。是这样想通的,首先了解数据结构和dfs算法的基本思路是怎么样的(学过数据结构理解就很简单),套框架,按照步骤思考每一步应该是怎么样,之后思考程序每一步走到哪(关键),用意是什么,走出两三组数就豁然开朗了。可以在草稿上写下流程图,使思路更清醒哦。解题思路在代码中注明了很详细,耐心想想其实很简单,不清楚的地方欢迎评论区留言。#include<stdio.h>//uncle-lu//对原创 2020-08-01 22:59:00 · 1019 阅读 · 2 评论 -
枚举及位运算
目录1.基础枚举算法2.整数枚举3.小数枚举4.位运算5.二进制枚举1.基础枚举算法枚举是基于已有知识来猜测答案的一种问题求解策略。枚举所有可能是问题解的答案并进行判断。在算法竞赛中,枚举是一种基本的技巧,广泛运用于部分分和对拍。例题1:顺序查找代码实现int pos=-1;for(int i=1; i<=n; i++)if(a[i]==x){ pos=i; break;}使用循环i= 1→n依次判断a[i]是否...原创 2020-07-19 17:26:19 · 1943 阅读 · 0 评论 -
算法时空复杂度分析
目录1.时间复杂度2.空间复杂度3.常见的算法复杂度4.相关典型例题5.总结1.时间复杂度概念 在ACM范围里,我们只需了解时间复杂度可以大致地通过一个算法运算的次数来描述程序运行的效率,常常用大写字母O来表示。在表示时间复杂度的时候,只保留数量级最大的一项,并忽略系数。举个栗子 对于给定的常数N ,若某一个算法计算的次数是3N^3 + N^2 + 10^5则我们可以认为它的时间复杂度为0(N^3)。只考虑最高次。2.空间复杂度...原创 2020-07-18 22:43:24 · 795 阅读 · 0 评论