蓝桥杯备战刷题two(自用)

1.杨辉三角形 

#include<iostream>
using namespace std;
#define ll long long
const int N=2e5+10;
int a[N];
//1 0 0 0 0 0 0
//1 1 0 0 0 0 0
//1 2 1 0 0 0 0
//1 3 3 1 0 0 0
//1 4 6 4 1 0 0
//1 5 10 10 5 1
//前缀和思想
//第一列全为1,第二列为从0开始递增1的序列,
//可以发现当前列为前面一列的前缀和序列
//N最大是1e9,第三列计算n*(n+1)/2>1e9得到n>44721
//又第三列前面有两个0,即最小需要44721+2=44723行
//当第三列的值已经大于1e9时,不需要再计算后面的数,
//直接根据第二列规律,找第二列中n的位置即可。
//由于第二列是从0开始的,此时可以确定n是在第n+1行,
//又因为是第二列,所以n的是数列中第n∗(n+1)/2+2个。
int main()
{int n;cin>>n;a[0]=1;int k=1;if(n==1)cout<<1<<endl;else{for(int i=1;i<44725;i++)//枚举行{for(int j=i;j>=1;j--)//从后往前(前缀和){a[j]+=a[j-1];if(a[j]==n){cout<<k+i-j+1<<endl;return 0;}}k+=(i+1);}cout<<(1+n)*n/2+2<<endl;}return 0;
}

2.迷宫

#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;
#define pii pair<int,int>
#define x first
#define y second
string ss[31]={
"                                                   ",
" 01010101001011001001010110010110100100001000101010",
" 00001000100000101010010000100000001001100110100101",
" 01111011010010001000001101001011100011000000010000",
" 01000000001010100011010000101000001010101011001011",
" 00011111000000101000010010100010100000101100000000",
" 11001000110101000010101100011010011010101011110111",
" 00011011010101001001001010000001000101001110000000",
" 10100000101000100110101010111110011000010000111010",
" 00111000001010100001100010000001000101001100001001",
" 11000110100001110010001001010101010101010001101000",
" 00010000100100000101001010101110100010101010000101",
" 11100100101001001000010000010101010100100100010100",
" 00000010000000101011001111010001100000101010100011",
" 10101010011100001000011000010110011110110100001000",
" 10101010100001101010100101000010100000111011101001",
" 10000000101100010000101100101101001011100000000100",
" 10101001000000010100100001000100000100011110101001",
" 00101001010101101001010100011010101101110000110101",
" 11001010000100001100000010100101000001000111000010",
" 00001000110000110101101000000100101001001000011101",
" 10100101000101000000001110110010110101101010100001",
" 00101000010000110101010000100010001001000100010101",
" 10100001000110010001000010101001010101011111010010",
" 00000100101000000110010100101001000001000000000010",
" 11010000001001110111001001000011101001011011101000",
" 00000110100010001000100000001000011101000000110011",
" 10101000101000100010001111100010101001010000001000",
" 10000010100101001010110000000100101010001011101000",
" 00111100001000010000000110111000000001000000001011",
" 10000001100111010111010001000110111010101101111000"};
struct Ch{char ch;pii per;
};
Ch mp[40][60];
bool vis[40][60];
int fx[] = {1,0,0,-1};
int fy[] = {0,-1,1,0};
void bfs(int x,int y)
{queue<pii> q;q.push({x,y});vis[x][y] = true;while(!q.empty()){pii temp = q.front();for(int i = 0;i < 4;i++){pii t ={temp.x + fx[i],temp.y + fy[i]};if(mp[t.x][t.y].ch == '0' && vis[t.x][t.y] == false){mp[t.x][t.y].per = temp;vis[t.x][t.y] = true;q.push(t);}}q.pop();}
}
int main()
{string s;for(int i = 1;i <= 30;i++){for(int j = 1;j <= 50;j++){mp[i][j].ch = ss[i][j];}}bfs(1,1);pii t = {30,50};while(t.x != 1 || t.y != 1){int x = t.x - mp[t.x][t.y].per.x;int y = t.y - mp[t.x][t.y].per.y;int flag;for(int i = 0;i < 4;i++){if(x == fx[i] && y == fy[i]){flag = i;break;}}switch(flag){case 0:s += 'D';break;case 1:s += 'L';break;case 2:s += 'R';break;case 3:s += 'U';break;}t = mp[t.x][t.y].per;}for(int i = s.size() - 1;i >= 0;i--){cout << s[i];}return 0;
}
//Ch记录这个结点的值和前驱结点的坐标,以便记录路径
//字典序最小的方向数组 - DLRU - 最优性剪枝
//求最短路使用BFS
//从终点开始遍历每个结点的前驱结点,直到起点结束,当两个坐标都为1的时候,循环结束
//当前结点减去前驱结点得到的值对应的就是前驱节点移动的方向
//使用switch来进行方向判断,加入答案,最后答案要进行逆序输出

 3.潜伏者

#include <iostream>
#include <map>
using namespace std;
int check[26];
int notwell[26];
int main()
{string secret;string origin;string need;cin>>secret>>origin>>need;map<char,int>ohp;map<char,int>shp;bool ok=1;for(int i=0;i<origin.size();i++){check[origin[i]-'A']=1;if(!ohp[origin[i]])ohp[origin[i]]=secret[i],shp[secret[i]]=origin[i];else {if(ohp[origin[i]]!=secret[i])notwell[origin[i]-'A']=1;}}for(int i=0;i<26;i++){if(check[i]==0){ok=0;break;}}string ans;for(int i=0;i<need.size();i++){if(!shp[need[i]]||notwell[need[i]-'A']){ok=0;break;}else ans+=(char)shp[need[i]];}if(!ok)cout<<"Failed"<<endl;else cout<<ans<<endl;return 0;
}

 4.灭鼠先锋

#include <iostream>
using namespace std;
//下第二行
//0000
//第一个人:XX00      X000
//第二个人:XXX0      XXX0
//第一个人:XXXX(输)  XXXX
//无论第一个人下一个还是两个,第二个人都会让它输
//即谁下满第一行,谁就赢
//换言之,谁开始下第二行,谁就输
int main()
{cout<<"LLLV"<<endl;return 0;
}

5.求和

#include <iostream>
using namespace std;
const int N=2e5+5;
#define ll long long
int n;
int a[N];
//a1 a2 a3 a4 a5 .. an
//a1*(a2+a3+...+an)+a2*(a3+a4+...+an)+a3*(a4+a5+...an)+an-1*an
//后缀和
ll suf[N];
int main()
{cin>>n;for(int i=1;i<=n;i++){cin>>a[i];suf[i]=a[i];}for(int i=n-1;i>=1;i--){suf[i]+=suf[i+1];}ll ans=0;for(int i=1;i<=n-1;i++){ans+=(a[i]*suf[i+1]);}cout<<ans<<endl;return 0;
}

 6.爬树的甲壳虫

 

#include <iostream>
using namespace std;
#define ll long long
const int p=998244353; 
const int N=1e5+10;
ll E[N];
ll qmi(int a,int k,int p)//a^k%p
{ll res=1;while(k){if(k&1)res=(ll)res*a%p;k>>=1;a=(ll)a*a%p;}return res;
}
//E[n]=E[n-1]+(1-P[n])*1+P[n]*(E[n]+1);
//E[n]=(E[n-1]+1)/(1-P[n])
//对到每层高度的期望,使用对前面的进行累加,以保证可以到达第n层了
//以第n层为例,在第n-1层有(1-P[n])的概率成功再乘以时间1s则为成功期望时间
//在第n-1层有P[n]的概率失败则P[n]*(E[n]+1)即失败概率乘以从头再爬到n和掉下去的1s则为失败期望时间
int main()
{int n;cin>>n;for(int i=1;i<=n;i++){int x,y;cin>>x>>y;E[i]=((E[i-1]+1)%p*(y%p))%p;E[i]*=qmi(y-x,p-2,p);	E[i]%=p;}cout<<E[n]<<endl;return 0;
}

 7.数的拆分

 

#include <iostream>
#include <cmath>
using namespace std;
#define ll long long
//如果能拆一定有以下的方式构造
//设p1和p2为素数或者其中一个为1
//n = p1^n1 * p2^n2
//n1和n2肯定可以被分解为=2+X或者=3+X
//即先判断此数是不是平方数或者立方数
//如果都不是则接着找质因子,若出现质因子的指数只有1,则肯定不行
//a最大是1e18,质因子找到4000即可
bool flag;
bool cubic(ll n)
{ll x = pow(n, 1.0 / 3);while (x * x * x <= n)//一定要使用while{if (x * x * x == n)return true;++x;}return false;
}
bool square(ll n)
{ll x = sqrt(n);while (x * x <= n)//一定要使用while{if (x * x == n)return true;++x;}return false;
}
int prime[2000];
int idx;
void Prime()
{int st[4005] = { 0 };for (int i = 2; i <= 4000; ++i)if (!st[i])for (int j = 2 * i; j <= 4000; j += i)st[j] = 1;for (int i = 2; i <= 4000; ++i)if (!st[i])prime[idx++] = i;}
ll num[100050];
int t;
int main()
{Prime();scanf("%d", &t);for (int i = 0; i < t; ++i)scanf("%lld", num + i);for (int i = 0; i < t; ++i){ll x = num[i];if (cubic(x) ||square(x)){printf("yes\n");continue;}flag = true;for (int j = 0; j < idx; ++j){int s = 0;while (x % prime[j] == 0){x /= prime[j];++s;}if (s == 1){flag = false;break;}}if (flag && (cubic(x) || square(x)))printf("yes\n");elseprintf("no\n");}return 0;
}

 

8.推导部分和

 

#include <iostream>
using namespace std;
#define ll long long
int n,m,q;
//并查集
int p[200000+10];
ll d[200000+10];
//以一个根结点为参照,l-1到根结点的距离为d[l-1] r到根结点的距离为d[r]
//根据前缀和原理 [l, r] 区间和为 d[r] - d[l - 1]
int find(int x)
{if(x!=p[x]){int t=p[x];p[x]=find(p[x]);d[x]+=d[t];}return p[x];
}
int main()
{scanf("%d %d %d",&n,&m,&q);//初始化并查集for(int i=1;i<=n;i++)p[i]=i;for(int i=1;i<=m;i++){int l,r;ll s;scanf("%d %d %lld",&l,&r,&s);int pl=find(l-1),pr=find(r);p[pl]=pr;d[pl]=d[r]-d[l-1]-s;}for(int i=1;i<=q;i++){int l,r;scanf("%d %d",&l,&r);int pl=find(l-1),pr=find(r);if(pl==pr){printf("%lld\n",d[r]-d[l-1]);}else{printf("UNKNOWN\n");}}return 0;
}

 (参考代码来自lanqiao1533688980)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/504440.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

整数和浮点数在内存中的存储(大小端字节序,浮点数的存取)

目录 1.整数在内存中的存储 2.大小端字节序和字节序判断 2.1什么是大小端&#xff1f; 2.2为什么会有大小端 3.浮点数在内存中的存储 3.1浮点数的存储 3.1.1 浮点数存的过程 3.1.2 浮点数取的过程 3.2 解析 3.3 验证浮点数的存储方式 1.整数在内存中的存储 整数的二进…

前端工程化(黑马学习笔记)

前端工程化介绍 我们目前的前端开发中&#xff0c;当我们需要使用一些资源时&#xff0c;例如&#xff1a;vue.js&#xff0c;和axios.js文件&#xff0c;都是直接再工程中导入的&#xff0c;如下图所示&#xff1a; 但是上述开发模式存在如下问题&#xff1a; ● 每次开发都是…

程序项目打包发布方法,采用InstallShield软件

重点&#xff1a; 1.程序项目做出来了&#xff0c;需要打包发布给用户。如何打包是关键。 2.采用InstallShield软件进行发布。 步骤一&#xff1a;创建一个依赖三方库配置环境的bat文件的项目。 &#xff08;主要测试三方库打包 和如果有bat文件&#xff0c;需要先创建环境&…

等概率事件算法

1等概率的生成(0-8)范围内的正整数 // Math.random 数据范围[0,1) 且 是 等概率的产生随机数 // 应用&#xff1a; // 1.生成等概率的整数&#xff08;等概率的生成(0-8)范围内的正整数 int value (int) (Math.random() * 9); System.out.println("value "…

Three 基础环境 实例(总结一)

Three 基础环境 THREE三要素 &#xff08;scene场景、camera摄像机、renderer渲染器&#xff09; 1、首先我们需要引入three.js包&#xff0c;引入 three.js 对象&#xff08;命名导出->默认导入&#xff09; import * as THREE from three; 2、创建scene场景 const s…

(C语言)函数详解上

&#xff08;C语言&#xff09;函数详解上 目录&#xff1a; 1. 函数的概念 2. 库函数 2.1 标准库和头文件 2.2 库函数的使用方法 2.2.1 sqrt 功能 2.2.2 头文件包含 2.2.3 实践 2.2.4 库函数文档的一般格式 3. 自定义函数 3.1 函数的语法形式 3.2 函数的举例 4. 形参和实参 4.…

手势识别应用介绍

目录 一、功能介绍 二、安装部署说明 2.1 文件目录说明 2.2 手势识别部分 一、功能介绍 这是一个通过摄像头捕获手势&#xff0c;根据不同的手势来做出不同操作的计算机程序。目前可以识别9种手势&#xff0c;可以根据识别到的手势&#xff0c;进行打开应用、增大音量、减小音量…

uniapp+vue基于Android的图书馆借阅系统qb4y3-nodejs-php-pyton

uni-app框架&#xff1a;使用Vue.js开发跨平台应用的前端框架&#xff0c;编写一套代码&#xff0c;可编译到Android、小程序等平台。 框架支持:springboot/django/php/Ssm/flask/express均支持 前端开发:vue 语言&#xff1a;pythonjavanode.jsphp均支持 运行软件:idea/eclip…

Salesforce CPQ - 02 - Quote Price

最近又有客户来咨询学习Salesforce CPQ&#xff0c;所以本人总结了下近几年CPQ培训的一些实际案例拿出来分享给大家&#xff1b; 再次介绍下本人是一位Salesforce十多年的从业者。 先来介绍下Salesforce的价格体系&#xff0c;再介绍下各个Product Price是如何配置及使用的&a…

四、西瓜书——支持向量机

第六章 支持向量机 1.间隔与支持向量 支持向量机的原理是寻找与支持向量具有最大间隔的划分超平面。支持向量机具有一个重要性质: 训练完成后,大部分的训练样本都不需保留,最终模型仅与支持向量有关. 首先&#xff0c;超平面的方程为&#xff1a; 点到超平面的距离为&#xff…

分布式存储Ceph应用

Ceph应用一、创建 CephFS 文件系统 MDS 接口1、服务端操作2、客户端操作 二、创建 Ceph 块存储系统 RBD 接口1、创建存储池2、将存储池转换为 RBD 模式3、初始化存储池4、创建镜像5、镜像管理5.1 查看镜像5.2 修改镜像大小5.3 删除和还原镜像 6、Linux客户端使用7、快照管理 三…

排序算法之快速排序(挖坑法)

挖坑法的思想&#xff1a;记第一个数为key&#xff0c;要调整key的位置&#xff0c;使得左边的都要比key的小&#xff0c;右边的数都比key的大。 记录下关键字keybegin&#xff0c;把28那个位置挖坑holebegin 让end找到小于28&#xff08;key&#xff09;的数&#xff0c;把那…