算法(蓝桥)
算法
️luckychen
能力太小的普通人
展开
-
dfs使用
全排列#include <bits/stdc++.h>using namespace std;//int a[5] = { 0, 1, 2, 3, 4 }, ans[5], vis[5], n = 4;int a[5] = { 0, 1, 2, 2, 4 }, ans[5], vis[5], n = 4;void dfs(int k){ if (k == n + 1) cout << ans[1] << ans[2] << ans[3] <原创 2021-06-05 00:30:53 · 181 阅读 · 0 评论 -
蓝桥杯 高僧斗法(尼姆博弈)
还是挺菜不要喷结论参考这里就应用尼姆博弈中的结论,先手的高僧取走某个堆(a[i])的k个石子后使得a1^ a2…^ a[i]-k^ …^an=0时 对方面临的就是奇异局面必败。#include <stdio.h>#include <iostream>using namespace std;int main(){ int s=0,a[100]={0}; whi...原创 2020-02-16 14:10:48 · 217 阅读 · 0 评论 -
蓝桥杯 火柴人(进阶博弈)
对博弈的理解还是比较薄弱 接触的题目较少写起来和理解还是非常困难 还是参考网上高手的思路 需要多刷和复习#include <stdio.h>char map[3][4]={'0','1','1','1','-','0','0','0','-','0','0','0'};void print(){ for(int i=0;i<3;i++) { for...原创 2020-02-18 11:34:42 · 192 阅读 · 0 评论 -
蓝桥杯 Excel地址
今天了解了巧用string类 和它的一些库函数#include<iostream>#include <stdio.h>#include <string.h>#include <math.h>using namespace std;void f(char str[]){ int len,m,c=0,r=0; len=strlen(s...原创 2020-02-14 14:24:30 · 204 阅读 · 0 评论 -
蓝桥 校内模拟赛(仅编程题)
gxnu某次模拟赛 所有代码仅供参考不负责绝对正确 发出来只是记录一下没有其他目的 同时本人还是比较菜强校的大佬就不喷了5**小明对类似于 hello 这种单词非常感兴趣,这种单词可以正好分为四段,第一段由一个或多个辅音字母组成,第二段由一个或多个元音字母组成,第三段由一个或多个辅音字母组成,第四段由一个或多个元音字母组成。给定一个单词,请判断这个单词是否也是这种单词,如果是请输出yes...原创 2020-03-14 17:27:07 · 558 阅读 · 0 评论 -
蓝桥杯 拉丁方块
一开始也是没什么头绪 强上了DFS 没想到还成了主要注意 一定要在返回前面的格子时要初始化当前格子#include <iostream>#include <algorithm>#include <string>#include <map>#include <set>#include <vector>#inclu...原创 2020-02-16 23:17:29 · 207 阅读 · 0 评论 -
蓝桥杯 梅森素数
2^n实质上是22 ^(n-1) 得到42 ^(n-2) 在得到 8*2 ^(n-3) 每次左边的数是上一次左边的数相加 这过程可以用加法模拟重要的是处理 每次相加后是否进高位#include <stdio.h>int k=1;int a[1000]={0};void print(){ for(int j=k-1;j>=0;j--)printf("%d",a...原创 2020-02-17 21:17:10 · 386 阅读 · 0 评论 -
蓝桥杯 排他平方数
标准开头 菜 勿喷即使题目比较简单 但是代码肯定有许多不足 还可以简化重要的是其中判断i和i*i各位数是否有重复和i的各位数是否重复的方法隐隐感觉会有更高效的方法 过后想出来会更新#include <stdio.h>#include <string.h>int a[10];//装一个数的各位数 int b[10];//装平方数的各个位数 void f(lon...原创 2020-02-17 10:30:34 · 270 阅读 · 0 评论 -
蓝桥杯 翻硬币
具体思路是参考其他大神的思想:比较两个字符串,相同下标用0表示,否则用1如10001显然要使它变成00000需要至少翻转4次–下标相减(贪心的性质)如果复杂的情况比如有四个不同的坐标 x1,x2,x3,x4如果我先消除x2和x3这两个1需要x2-x3次然后x1和x4的1一共x4-x1次 总次数:x4+x2-x3-x1其他消1的组合类似推导按照贪心的思想我们需要每次xm-xn的之...原创 2020-02-14 21:30:49 · 164 阅读 · 0 评论 -
蓝桥杯 买不到的数
看网上说枚举上界为最小公倍数 但是测试88 99这组数不行改为x*y才行 具体为什么不知道还有个牛逼的结论是a*b-a-b当做知识积累吧#include <stdio.h>int a[1000000]={0};int gcd(int a, int b) { return a%b == 0?b:gcd(b,a%b); //求出两个数...原创 2020-02-16 15:29:02 · 151 阅读 · 0 评论 -
STL常规使用
#include <stdio.h>#include <algorithm>#include<stdlib.h>//随机数函数的头文件 #include <string>#include <iostream> using namespace std;#include <vector>#include <set>#include <map>struct node{ string s;原创 2020-11-13 23:55:46 · 102 阅读 · 0 评论 -
蓝桥杯 幸运数
菜鸟 勿喷 解法类似于求第n个素数的筛法#include <stdio.h>#define N 100000int a[N];int luck[N];int main(){ for(int i=1;i<N;i++)a[i]=1;//初始化 for(int i=1;i<N;i++)if(i%2==0)a[i]=0;//按照题目描述筛掉2的倍数 i...原创 2020-02-13 22:41:21 · 104 阅读 · 0 评论 -
蓝桥杯 颠倒的价牌
思路解释在注释里#include<iostream>#include <stdio.h>#include <string.h>#include <math.h>using namespace std;int visited[10]={0,0,0,1,1,0,0,1,0,0};//不能倒挂的数字不使用int change[10]={0,...原创 2020-02-14 16:09:43 · 159 阅读 · 3 评论 -
蓝桥杯 大臣旅费
一开始就是觉得用DFS想不通为什么网上是说两遍DFS/BFS找出当前最大边(树的最大直径)后来发现纯DFS时间代价太大了O(n²)附上纯DFS代码#include <stdio.h>#include <string.h>int n,visited[1000],Point[1000]={0};int dist[1000][1000]={0};void end...原创 2020-02-15 11:55:11 · 218 阅读 · 0 评论 -
蓝桥杯 黄金连分数
菜 勿喷是参考网上的思路首先可以发现连分数的每一层都是每个斐波那契数列前一项初后一项求小数点一百位数可以模拟除法的过程需要精确的100位则需要比较高项的斐波那契#include<iostream>using namespace std;#define LL long longint main(){ LL a[100]={0}; a[1]=1; a[2]=2;...原创 2020-02-15 21:15:32 · 253 阅读 · 0 评论 -
蓝桥杯 格子中输出
格子中输出 StringInGrid函数会在一个指定大小的格子中打印指定的字符串。 要求字符串在水平、垂直两个方向上都居中。 如果字符串太长,就截断。 如果不能恰好居中,可以稍稍偏左或者偏上一点。 下面的程序实现这个逻辑,请填写划线部分缺少的代码。#include <stdio.h>#include <string.h>void StringInGrid(int width, int height, const char* s){ int i,k; char buf[原创 2020-08-16 23:44:32 · 160 阅读 · 0 评论 -
蓝桥杯 牌型种数
#include <stdio.h>int ans=0;void dfs(int n,int step){if(step>14)return ;if(n==13){ ans++; return ;}for(int i=0;i<=4;i++){ if(n+i<=13) dfs(n+i,step+1);}}int main(){dfs(0,1);printf("%d\n",ans);return 0;}dfs求解,不同号的种类为1-原创 2020-08-17 11:16:55 · 794 阅读 · 0 评论 -
2016年蓝桥杯省赛C/C++ A组 最大比例
X星球的某个大奖赛设了M级奖励。每个级别的奖金是一个正整数。并且,相邻的两个级别间的比例是个固定值。也就是说:所有级别的奖金数构成了一个等比数列。比如:16,24,36,54其等比值为:3/2现在,我们随机调查了一些获奖者的奖金数。请你据此推算可能的最大的等比值。输入格式:第一行为数字N(n<100),表示接下的一行包含N个正整数第二行N个正整数Xi(Xi<1 000 000 000 000),用空格分开。每个整数表示调查到的某人的奖金数额要求输出:一个形如A/B的分数.原创 2020-08-12 20:24:10 · 341 阅读 · 0 评论 -
蓝桥杯 密码脱落
密码脱落X星球的考古学家发现了一批古代留下来的密码。 这些密码是由A、B、C、D 四种植物的种子串成的序列。仔细分析发现,这些密码串当初应该是前后对称的(也就是我们说的镜像串)。 由于年代久远,其中许多种子脱落了,因而可能会失去镜像的特征。你的任务是: 给定一个现在看到的密码串,计算一下从当初的状态,它要至少脱落多少个种子,才可能会变成现在的样子。输入一行,表示现在看到的密码串(长度不大于1000) 要求输出一个正整数,表示至少脱落了多少个种子。例如,输入: ABCBA 则程序应该输出: 0再.原创 2020-08-09 11:43:10 · 199 阅读 · 0 评论 -
蓝桥杯-高斯日记(excel解法)
首先要注意Excel 的日期处理范围,它不能直接处理题目中的数据在这里要说明,映射最好是1000的整数倍,这样子(两对日期之间的闰年数目才相同)映射后的两个日期之差才会等于映射前的日期之差:例如1999-04-30和2001-04-30 之差为365+366而 2001-04-30和2003-04-30之差为365+365不一样 但是他们是映射两年后的关系,而差距的天数却不一样,原因在于2000为闰年,所以要得到正确的结果,但是一定要满足这两个式子 闰年+1000=闰年, 平年+1000=平..原创 2020-08-28 14:01:16 · 561 阅读 · 0 评论 -
蓝桥杯 旋转方阵
#include <stdio.h> #include <stdlib.h>void rotate(int* x, int rank){ int* y = (int*)malloc(rank*rank); // 填空 for(int i=0; i<rank * rank; i++) { y[ (i%4)*rank +(rank-1-i/4) ] = x[i]; // 填空 } for(int i=0; i<rank*rank; i++) {原创 2020-08-30 21:25:19 · 179 阅读 · 0 评论 -
蓝桥杯 k倍区间
暴力模拟 双循环肯定超时了,需要找到数字间的规律进行优化#include<bits/stdc++.h>using namespace std;typedef long long ll;#define maxn 100005//sum[r] - sum[l-1]就是区间[l,r]的和。区间[l,r]的和是k的倍数即(sum[r] - sum[l-1])%k == 0 即sum[r]%k == sum[l-1]%kint main(){ ll sum[maxn]={0}; int原创 2021-02-19 13:51:59 · 95 阅读 · 0 评论 -
蓝桥杯 本质上升序列
题目介绍小蓝特别喜欢单调递增的事物。 在一个字符串中,如果取出若干个字符,将这些字符按照在字符串中的顺序排列后是单调递增的,则成为这个字符串中的一个单调递增子序列。 例如,在字符串 lanqiao 中,如果取出字符 n 和 q,则 nq组成一个单 调递增子序列。类似的单调递增子序列还有 lnq、 i、 ano 等等。小蓝发现,有些子序列虽然位置不同,但是字符序列是一样的,例如取第 二个字符和最后一个字符可以取到 ao,取最后两个字符也可以取到 ao。小蓝认为他们并没有本质不同。 对于一个字符串,原创 2021-01-24 00:34:15 · 2844 阅读 · 6 评论