08 2022 档案

摘要:广搜,挨个遍历,记录起点和终点,下一个的起点等于终点+1 #include<bits/stdc++.h>using namespace std;int xx[4]={0,0,1,-1},yy[4]={1,-1,0,0};int kt,s=0,kts,ktts;char c;int i,j,n,a[1 阅读全文
posted @ 2022-08-25 17:20 TheMagician 阅读(112) 评论(0) 推荐(0)
摘要:根据题意,我们可以从0,0遍历,将最外围圈设为1,将所有0设为1 最后相加 围成的圈外一定和边相靠 #include<bits/stdc++.h>using namespace std;int i,j,a[20][20],s=0;char c;void pd(int x,int y){ if(x+1 阅读全文
posted @ 2022-08-24 17:23 TheMagician 阅读(138) 评论(0) 推荐(0)
摘要:将所有的0替换为2,从边缘进行搜索,把圈外的2都换成0 外圈的0一定和边相邻 扩大边界,以便于将边界上单独的0标记。 #include<bits/stdc++.h>using namespace std;int n,i,j,a[50][50],ii,jj,bj,f,bjj[50];void pd(i 阅读全文
posted @ 2022-08-24 17:05 TheMagician 阅读(69) 评论(0) 推荐(0)
摘要:用字符分离,再从头遍历,若不是0,则s+1,函数,并去其他方向看是否有不是0的数,若有,则变0,函数,若没有,退出函数,继续遍历 #include<bits/stdc++.h>using namespace std;char a[200][200]; int i,j;int n,m,s=0;int 阅读全文
posted @ 2022-08-24 11:42 TheMagician 阅读(146) 评论(0) 推荐(0)
摘要:用两个变量,一个步数,一个下一步步数的总数,广搜 注意:数组开大 #include<bits/stdc++.h>using namespace std;int dx[10]={-2,-2,-1,-1,2,2,1,1};int dy[10]={1,-1,2,-2,1,-1,2,-2};long lon 阅读全文
posted @ 2022-08-24 11:31 TheMagician 阅读(51) 评论(0) 推荐(0)
摘要:所谓深搜(也叫回溯法)就是采用的是“一直往下走,走不通了就掉头,换一条路再往下走” 总结来说就是递归的枚举 一直往深处走,直到找到解或者走不下去为止 主要步骤:1.构建一个递归函数,函数参数应该最起码包括题目需求使用的参数2.找到边界,递归函数里首先列出递归结束的条件,即满足要求或者超出范围3.接着 阅读全文
posted @ 2022-08-23 21:02 TheMagician 阅读(142) 评论(0) 推荐(0)
摘要:a[i][j] 表示 j 分成 i个非空的数的方案数。 显然 j<i 时 a[i][j]=0 , i=j 时 a[i][j]=1; 方案数为 a[i][j-i] (此时 j 必须大于 i) 所以,状态转移方程为: a[i][j]=a[i-1][j-1]+a[i][i-j] #include<cstd 阅读全文
posted @ 2022-08-23 20:55 TheMagician 阅读(42) 评论(0) 推荐(0)
摘要:函数判断是否相邻:直径与距离 在进行深搜,标记路过的,若不是且相邻,再调用 注意:第一个和底层需独立判断 #include<bits/stdc++.h>using namespace std;long long t,n,h,r,i,j,b[1005],falg,bj;struct ww{ long 阅读全文
posted @ 2022-08-23 17:20 TheMagician 阅读(27) 评论(0) 推荐(0)
摘要:1、查找第一行,从左往右查找,发现合适的位置,放下第一个皇后 2、查找第二行,从左往右查找,发现合适的位置,放下第二个皇后 3、查找第三行,从左往右查找,发现合适的位置,放下第三个皇后 假设要在m行k列放置一个皇后,只需要查看第一行到m-1行就行。如果k列已经存在皇后,那么m行k列这个位置就不适合了 阅读全文
posted @ 2022-08-23 14:18 TheMagician 阅读(37) 评论(0) 推荐(0)
摘要:先定义两个数组,一个是用来存放解的,一个是用来标记该数是否用过。 先判断格子是否填满了,如果填满,则输出。 如果没有填满,则开始循环,在循环中先判断当前填的数是否用过,如果没有,则填入,搜索下一格。 #include<bits/stdc++.h>using namespace std;int a[1 阅读全文
posted @ 2022-08-23 09:55 TheMagician 阅读(22) 评论(0) 推荐(0)
摘要:一个判断素数的函数 另一个函数大体分为: ans=ans+a[n+1];pd(n+1,m+1); ans=ans-a[n+1];//回溯 pd(n+1,m);//下一种方案 注意:不同组合算不同种 #include<bits/stdc++.h>using namespace std;long lon 阅读全文
posted @ 2022-08-23 08:25 TheMagician 阅读(38) 评论(0) 推荐(0)
摘要:直接二分答案,区间的l取0、r取长度和,然后check时对每条长度除以二分的值向下取整,判断是否不小于k就行了。基本是转换成整型进行二分,这里直接对实型进行二分,然后输出时稍微处理就行了。#include<bits/stdc++.h> using namespace std; int n,k; do 阅读全文
posted @ 2022-08-22 21:29 TheMagician 阅读(119) 评论(0) 推荐(0)
摘要:我们依次要判断 a 中的每一个数并计算出能切出多少个 mid ,还要用一个变量 ans 储存他们,如果 ans 分的分数比 k 多或者正好等于,返回真。如果是小于 k ,返回假。 当 f 返回的是真的时候,我们就要试试还能不能把 mid 调大一点,就要l = mid; 如果返回的是假,我们就加的太大 阅读全文
posted @ 2022-08-22 19:48 TheMagician 阅读(95) 评论(0) 推荐(0)
摘要:首先将石头位置排个序,以便处理方便。 从位置的小到大扫遍所有石头,用一个变量存储上一个跳到的点。第一个与这上一个点的距离大于等于x的石头即是下一个跳到的点。因为我们要取最优状态,所以要保证跳过的石头数最少。 这样,便求出了这个x是否可行,如果可行,那就往右边二分,但要记得范围要包括x;若不行,则往左 阅读全文
posted @ 2022-08-22 19:04 TheMagician 阅读(279) 评论(0) 推荐(0)
摘要:明不断取最小的两堆合并成较大的一堆是最优的。 (不太好证哦) ①**最优方案可以表示成一个二叉树。**总代价 \sum_{i=1}^{n} a_i × depth_i∑i=1n​ai​×depthi​。其中 depthdepth 是深度,也就是这堆果子在整个过程中被有效合并了几次。 注意:a_iai 阅读全文
posted @ 2022-08-17 10:12 TheMagician 阅读(198) 评论(0) 推荐(0)
摘要:每个系统的半径即为该系统拦截的导弹中距离系统坐标最远的导弹的距离,所以不妨先算出每个导弹距离1号系统的距离,然后以距1号系统的距离进行升序排序。然后从距离1号系统最远的那枚导弹开始,计算出比它距离1号系统的距离远的所有导弹中距离2号系统的距离最远的那个距离(即以它前一枚导弹为1号系统所拦截的最远的导 阅读全文
posted @ 2022-08-16 19:56 TheMagician 阅读(255) 评论(0) 推荐(0)
摘要:分析:当高位数比低位数小时,删掉 如324 先删掉3 234 删4 #include<bits/stdc++.h>using namespace std;string s;int n,a[251];int main(){ cin>>s; scanf("%d",&n); int len=s.lengt 阅读全文
posted @ 2022-08-16 13:57 TheMagician 阅读(96) 评论(0) 推荐(0)
摘要:分析:因为每次打完水都是最大的下一个,所以次数为m+已打完的人数,当打完后将这个水龙头赋为现在打的水的人的下一个#include<bits/stdc++.h> using namespace std; int b[200000],i,j,n,m,bj[20000],a[200000],as,falg 阅读全文
posted @ 2022-08-16 11:19 TheMagician 阅读(105) 评论(0) 推荐(0)
摘要:分析:因为最多两个一组,所以可以按最大的和最小的一组,是否满足条件,如果满足,同时赋值0,. #include<bits/stdc++.h>using namespace std;int n,m,i,a[300000],s=0,j;int main(){ cin>>m>>n; for(i=1;i<= 阅读全文
posted @ 2022-08-16 08:50 TheMagician 阅读(37) 评论(0) 推荐(0)
摘要:分析:每次移动都需要将其补全或删掉,如果这个正好是平均数,则步骤次数不增加 9 8 17 6 -1 -2 7 -4 0 -3 4 -4 0 0 4 -4 0 0 0 0 #include<bits/stdc++.h>using namespace std;int main(){ int n,s=0, 阅读全文
posted @ 2022-08-16 08:19 TheMagician 阅读(36) 评论(0) 推荐(0)
摘要:分析:根据样例可得x(n)=2+2*2…… 运用高精乘进行乘 #include<bits/stdc++.h>using namespace std;int c[600000],jw[600000];int i,n,a[600000],j,b[600000]={0,2},bj;int main(){ 阅读全文
posted @ 2022-08-15 19:16 TheMagician 阅读(141) 评论(0) 推荐(0)
摘要:分析:可以将其分割成两两相邻的(可以重复),假设先从左边拿,如果有连着一块拿走 如:9 8 5 8 9 1 5 3 先拿9,左边则没有,答案加9-0 再拿8,左边是9,拿走了9个,正好拿走了自己这部分 再拿5,左边是8,同上 再是8,左边是5,在拿到8完成前便断了,最多拿走5个,所以答案加8-5 # 阅读全文
posted @ 2022-08-15 16:31 TheMagician 阅读(62) 评论(0) 推荐(0)
摘要:分析:可以从头建立一个先序树,再根据后序输出 算法:后序是左右跟的顺序输出,而最下面的左儿子则是输入的总数,左儿子的数值一定是奇数,当到右儿子时则是偶数,可以先判断是否是右儿子,再通过除以二的父节点(若也是右儿子会继续执行) #include<bits/stdc++.h>using namespac 阅读全文
posted @ 2022-08-15 15:44 TheMagician 阅读(31) 评论(0) 推荐(0)
摘要:分析:根据样例得下面每有二个,则往上输出一个,以此类推,递推 如:下面为 10001011先判断b【1】【1】在判断b【1】【2】此时【2】已是偶数,给b【2】【1】赋值(第一个数是在原有层数+1)(第二个数是较大的数除以2)因为b【2】【i】的本行数的个数序号为奇数,所以继续 输出:设为0,1,2 阅读全文
posted @ 2022-08-15 15:38 TheMagician 阅读(59) 评论(0) 推荐(0)
摘要:前序遍历的规则:(1)访问根节点 (2)前序遍历左子树(3)前序遍历右子树 中序遍历的规则:(1)中序遍历左子树 (2)访问根节点 (3)中序遍历右子树 后序遍历二叉树的规则: (1)后序遍历左子树 (2)后序遍历右子树 (3)访问根节点 算法分析:我们可以将其分左跟右两部分,先从后序中找出根节点, 阅读全文
posted @ 2022-08-15 10:47 TheMagician 阅读(140) 评论(0) 推荐(0)
摘要:算法分析:一个数可分为自身(+1)和自身除以2的数所带的次数,适合用递推从前往后推,比如说4可以分为2和1和自身所带表的数相加 1 2 12 3 13 414 24 124 注意:自身也要加1,若不足3直接输出 #include<bits/stdc++.h>using namespace std;i 阅读全文
posted @ 2022-08-14 21:09 TheMagician 阅读(238) 评论(0) 推荐(0)
摘要:试题分析: 销量与售价的关系为:前一个较大的销量减去差值 已列出范围内(按进价出售的销量与最后列出的销量)的每两个之间的差值:(前一个列出的较大的销量与后一个列出的较小的销量的差值)除以(后一个列出的较大的售价与前一个列出的较小的售价的差值) 利润:若原有的最大利润的售价偏大,则需要补贴(因为售价越 阅读全文
posted @ 2022-08-14 14:47 TheMagician 阅读(339) 评论(0) 推荐(0)
摘要:试题分析:需要先进行判断是否是新年,再判断是否是闰年,再判断月,再判断是否是回文,最后日期增加1 #include<bits/stdc++.h>using namespace std;int main(){ int s30,s31,s2,i,c=0,bj,j,nian,yue,ri; int a,b 阅读全文
posted @ 2022-08-14 09:51 TheMagician 阅读(58) 评论(0) 推荐(0)
摘要:算法分析:先求出x的所有倍数和这个数是x的多少倍,这样最大公约数的问题解决,再去找能构成符合题意的最小公倍数的数,看是否是最大公约数 注意:洛谷上提交需优化,数组范围要够,不能出现多余的循环,比如先判断是否能构成最小公倍数,再去看是否有更大的约数,如果公倍数超过最小公倍数,则退出循坏 #includ 阅读全文
posted @ 2022-08-14 09:33 TheMagician 阅读(77) 评论(0) 推荐(0)
摘要:试题分析:要求最后覆盖的地毯的编号,所以可以从n向上遍历,找到符合要求的地毯,然后输出 注意:没有地毯时输出-1 #include<bits/stdc++.h>using namespace std;int main(){ int s,ss,n,x[20005],y[20005],i,j,g[200 阅读全文
posted @ 2022-08-14 08:33 TheMagician 阅读(74) 评论(0) 推荐(0)
摘要:算法分析:因为范围是从-100到100,所以直接暴力枚举 注意:因为精确到小数点2位,所以用double类型 #include<bits/stdc++.h>using namespace std;int main(){ double i,a,b,c,d; cin>>a>>b>>c>>d; for(i 阅读全文
posted @ 2022-08-14 08:13 TheMagician 阅读(36) 评论(0) 推荐(0)
摘要:试题分析:将 1到9九个数分成 3 组,分别组成 3 个三位数,且使这 3个三位数构成 1:2:3的比例,数值较小,所以暴力枚举 算法分析:因为4*3=12,超过了10,所以百位的数最多为3,因为1到9每个数都要出现,所以不超过1000,且要判断是否全部出现,可以通过从第一个数高位往下依次乘应乘的倍 阅读全文
posted @ 2022-08-14 07:37 TheMagician 阅读(145) 评论(0) 推荐(0)
摘要:算法分析:如果有两个会说话,那么就要在他们之间找一个不同的行或列的值较小的,因为数据较小用桶排,用贪心找出在尽可能覆盖多的情况,存入另一个数组,用比较排序按从小到大输出 注意:最后输出的是有顺序的,需要再次比较 #include<bits/stdc++.h>using namespace std; 阅读全文
posted @ 2022-08-13 08:46 TheMagician 阅读(150) 评论(0) 推荐(0)
摘要:算法分析:首先先用归并排序,求出当前的比分情况,再比较,根据实力放入胜者组和败者组,因为败者组都不变,胜者组都加1,所以各自都是有序的,不用继续之前的分离,直接继续归并排序,再比较 #include<bits/stdc++.h>using namespace std; int n,q,bsl[200 阅读全文
posted @ 2022-08-13 08:45 TheMagician 阅读(136) 评论(0) 推荐(0)
摘要:算法分析:因为要根据分数排名,所以先用快排排序,再根据m*1.5(因为会默认向下取整,不用管)的人,求出录取线,再找不低于录取线的人,求出总人数,for循环输出录取的人 #include<bits/stdc++.h>using namespace std;struct a{ int xh; int 阅读全文
posted @ 2022-08-13 08:41 TheMagician 阅读(67) 评论(0) 推荐(0)
摘要:试题分析:本题目有三个要求,1.总分高的在前面,2.总分相同,语文成绩高的在前面,3.总分,语文成绩相同,学号小的在前面,适合用结构体 算法分析:设置结构体,用快排排序,先比较总分,再试语文,最后按学号比较 #include<bits/stdc++.h>using namespace std;str 阅读全文
posted @ 2022-08-13 08:39 TheMagician 阅读(122) 评论(0) 推荐(0)
摘要:试题分析:本题目要求将n个数中每个数及出现的次数输出,所以可以用到排序,先进行归并排序,在计算每个数字出现的次数,用for循环遍历,一边遍历,一边输出。 #include<bits/stdc++.h>using namespace std;int aa[1000000],a[1000000],n,i 阅读全文
posted @ 2022-08-13 08:38 TheMagician 阅读(48) 评论(0) 推荐(0)
摘要:试题解析:本题要运用排序,题目要求去重+排序,而且每个数最大不超过1000,数据较小,所以我们就可以直接使用桶排。然后要先输出个数,再输出每个数 #include<bits/stdc++.h>using namespace std;int s;struct a { int sz;} b[2000]; 阅读全文
posted @ 2022-08-13 08:35 TheMagician 阅读(42) 评论(0) 推荐(0)
摘要:试题分析:本题应计算每种笔最少花多少钱,然后再进行比较,适合使用贪心寻找最小输出。 注意:进行比较的s变量初值应开大,不然会wa。 #include<bits/stdc++.h>using namespace std;int main(){ int n,s=9999999,ss,a,b,i; cin 阅读全文
posted @ 2022-08-13 08:34 TheMagician 阅读(42) 评论(0) 推荐(0)
摘要:试题分析:当位于非地雷格寻找八个方向地雷的个数,所以我们可以将有雷的格设为1,把其余八个方向的值加起来输出 注意:不要忘记原样输出地雷格。 #include<bits/stdc++.h>using namespace std;int b[110][110];int main(){ char a[11 阅读全文
posted @ 2022-08-13 08:32 TheMagician 阅读(148) 评论(0) 推荐(0)
摘要:试题分析:本题骑士每n天收到n个金币,所以设变量bj和j,当j达到bj时bj加1,j重新赋初值,模拟出每天骑士获得的金币数,加起来,输出 #include<bits/stdc++.h>using namespace std;int main(){ int n,i,j=0,s=0,bj=1; cin> 阅读全文
posted @ 2022-08-13 08:29 TheMagician 阅读(34) 评论(0) 推荐(0)
摘要:题目描述:题目要求统计l-r之间“2”出现的次数,其实也就是要求将l-r之间每个数字进行分离,寻找2,若出现,则累加。 算法分析:用分离法得出每位上的2 #include<bits/stdc++.h>using namespace std;int main(){ int l,i,r,s=0,j; c 阅读全文
posted @ 2022-08-13 08:28 TheMagician 阅读(37) 评论(0) 推荐(0)
摘要:题目分析:题目说明了十一分制与二十一分制要求,所以模拟即可 注意:如果一名选手为11(21)分,而另一名选手与其分的差距小于2,则比赛继续进行,直到差距等于2为止 #include<bits/stdc++.h>using namespace std;int i=0,j,w=0,l=0;char a[ 阅读全文
posted @ 2022-08-13 08:26 TheMagician 阅读(83) 评论(0) 推荐(0)
摘要:试题分析:题目意思是津津每个月都会有300再加上原剩下的,再与预算比较。如果够,则将剩余钱中整百给妈妈(整除100);如果不够,则输出“-”+这个月月份。所以我们可以从1-12月依次遍历来完成题目要求。 注意:最后一个月剩下的不够100的也要加上,但没有利息 #include<bits/stdc++ 阅读全文
posted @ 2022-08-13 08:25 TheMagician 阅读(128) 评论(0) 推荐(0)
摘要:试题分析:要理解陶陶要摘得苹果最高能达到多少高度(也就是陶陶身高+板凳高度(30)),然后将每个苹果的高度依次比较即可(运用if语句进行比较)。 #include<bits/stdc++.h>using namespace std;int main(){ int a[17],i,j,s=0; for 阅读全文
posted @ 2022-08-13 08:23 TheMagician 阅读(36) 评论(0) 推荐(0)
摘要:算法分析:五个小朋友依次将自己的糖果分为三份,多余的自己吃掉,自己取一份,其余两份分别给左右两个朋友。所以我们解这道题就要运用模拟,就是模拟五个小朋友给相邻的小朋友分糖,整除3默认如果有余数就舍弃 注意:1号和5号小朋友相邻 #include<bits/stdc++.h>using namespac 阅读全文
posted @ 2022-08-13 08:22 TheMagician 阅读(217) 评论(0) 推荐(0)