【蓝桥杯比赛-C++组-经典题目汇总】
1. 最短路
题目描述:
如下图所示,G是一个无向图,其中蓝色边的长度是1、橘色边的长度是2、绿色边的长度是3。
则从 A 到 S 的最短距离是多少?
#include <iostream>
#include <cstring>
using namespace std;
const int N=200,n=19;
int dist[N];
int g[N][N];
void add(char x,char y,int c)
{
int a=x-'A'+1;
int b=y-'A'+1;
g[a][b]=g[b][a]=c;
}
bool vis[N];
int dijkstra()
{
memset(dist,0x3f,sizeof dist);
dist[1]=0;
for(int i=0;i<n;i++)
{
int t=-1;
for(int j=1;j<=n;j++)
{
if(!vis[j]&&(t==-1||dist[j]<dist[t]))
t=j;
}
vis[t]=1;
for(int j=1;j<=n;j++)
{
dist[j]=min(dist[j],dist[t]+g[t][j]);
}
}
return dist[n];
}
int main()
{
memset(g,0x3f,sizeof g);
add('A','B',2);
add('A','C',1);
add('A','D',1);
add('A','D',1);
add('B','J',2);
add('B','G',1);
add('C','D',3);
add('C','F',3);
add('C','G',3);
add('D','E',1);
add('D','G',2);
add('D','H',1);
add('D','I',2);
add('E','H',1);
add('E','I',3);
add('F','G',1);
add('F','J',1);
add('G','F',1);
add('G','I',3);
add('G','K',2);
add('H','I',1);
add('H','L',2);
add('I','M',3);
add('J','S',2);
add('K','N',1);
add('K','L',3);
add('K','P',2);
add('L','M',1);
add('L','R',1);
add('M','N',2);
add('M','Q',1);
add('M','S',1);
add('N','P',1);
add('O','P',1);
add('O','Q',1);
add('O','R',3);
add('R','S',1);
cout<<dijkstra();
return 0;
}
62
63
64
65
66
67
68
69
70
7 72
73
74
75
76
77
2. 数字三角形
题目描述:
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
2
3
4
5
上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。
路径上的每一步只能从一个数走到下一层和它最近的左边的那个数或者右边的那个数。此外,向左下走的次数与向右下走的次数相差不能超过1。
【输入描述】
输入的第一行包含一个整数N(1≤N ≤100),表示三角形的行数。
下面的N行给出数字三角形。数字三角形上的数都是О至100之间的整数。
【输出描述】
输出一个整数,表示答案。
#include<iostream>
using namespace std;
int a[200][200];
int dp[200][200];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=i;j++)
cin>>a[i][j];
}
dp[1][1]=a[1][1];
for(int i=2;i<=n;i++)
{
for(int j=1;j<=i;j++)
{
if(j==1)dp[i][j]=dp[i-1][j]+a[i][j];
else if(j==i)dp[i][j]=dp[i-1][j-1]+a[i][j];
else dp[i][j]=max(dp[i-1][j],dp[i-1][j-1])+a[i][j];
}
}
if(n%2==0){
cout<<max(dp[n][n/2],dp[n][n/2+1]);
}
else{
cout<<dp[n][n/2+1]<<endl;
}
}
3. 递增序列
题目描述:
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
对于一个字母矩阵,我们称矩阵中的一个递增序列是指在矩阵中找到两个字母,它们在同一行,同一列,或者在同一45度的斜线上,这两个字母从左向右看、或者从上向下看是递增的。
例如,如下矩阵中
LANN
QIAO
2
有LN、LN、AN、AN、IO、AO、LQ、AI、NO、NO、等13个递增序列。注意当两个字母是从左下到右上排列时,从左向右看和从上向下看是不同的顺序。
对于下面的30行50列的矩阵,请问总共有多少个递增序列?
VLPWJVVNNZSWFGHSFRBCOIJTPYNEURPIGKQGPSXUGNELGRVZAG
SDLLOVGRTWEYZKKXNKIRWGZWXWRHKXFASATDWZAPZRNHTNNGQF
ZGUGXVQDQAEAHOQEADMWWXFBXECKAVIGPTKTTQFWSWPKRPSMGA
BDGMGYHAOPPRRHKYZCMFZEDELCALTBSWNTAODXYVHQNDASUFRL
YVYWQZUTEPFSFXLTZBMBQETXGXFUEBHGMJKBPNIHMYOELYZIKH
ZYZHSLTCGNANNXTUJGBYKUOJMGOGRDPKEUGVHNZJZHDUNRERBU
XFPTZKTPVQPJEMBHNTUBSMIYEGXNWQSBZMHMDRZZMJPZQTCWLR
ZNXOKBITTPSHEXWHZXFLWEMPZTBVNKNYSHCIQRIKQHFRAYWOPG
MHJKFYYBQSDPOVJICWWGGCOZSBGLSOXOFDAADZYEOBKDDTMQPA
VIDPIGELBYMEVQLASLQRUKMXSEWGHRSFVXOMHSJWWXHIBCGVIF
GWRFRFLHAMYWYZOIQODBIHHRIIMWJWJGYPFAHZZWJKRGOISUJC
EKQKKPNEYCBWOQHTYFHHQZRLFNDOVXTWASSQWXKBIVTKTUIASK
PEKNJFIVBKOZUEPPHIWLUBFUDWPIDRJKAZVJKPBRHCRMGNMFWW
CGZAXHXPDELTACGUWBXWNNZNDQYYCIQRJCULIEBQBLLMJEUSZP
RWHHQMBIJWTQPUFNAESPZHAQARNIDUCRYQAZMNVRVZUJOZUDGS
PFGAYBDEECHUXFUZIKAXYDFWJNSAOPJYWUIEJSCORRBVQHCHMR
JNVIPVEMQSHCCAXMWEFSYIGFPIXNIDXOTXTNBCHSHUZGKXFECL
YZBAIIOTWLREPZISBGJLQDALKZUKEQMKLDIPXJEPENEIPWFDLP
HBQKWJFLSEXVILKYPNSWUZLDCRTAYUUPEITQJEITZRQMMAQNLN
DQDJGOWMBFKAIGWEAJOISPFPLULIWVVALLIIHBGEZLGRHRCKGF
LXYPCVPNUKSWCCGXEYTEBAWRLWDWNHHNNNWQNIIBUCGUJYMRYW
CZDKISKUSBPFHVGSAVJBDMNPSDKFRXVVPLVAQUGVUJEXSZFGFQ
IYIJGISUANRAXTGQLAVFMQTICKQAHLEBGHAVOVVPEXIMLFWIYI
ZIIFSOPCMAWCBPKWZBUQPQLGSNIBFADUUJJHPAIUVVNWNWKDZB
HGTEEIISFGIUEUOWXVTPJDVACYQYFQUCXOXOSSMXLZDQESHXKP
FEBZHJAGIFGXSMRDKGONGELOALLSYDVILRWAPXXBPOOSWZNEAS
VJGMAOFLGYIFLJTEKDNIWHJAABCASFMAKIENSYIZZSLRSUIPCJ
BMQGMPDRCPGWKTPLOTAINXZAAJWCPUJHPOUYWNWHZAKCDMZDSR
RRARTVHZYYCEDXJQNQAINQVDJCZCZLCQWQQIKUYMYMOVMNCBVY
ABTCRRUXVGYLZILFLOFYVWFFBZNFWDZOADRDCLIRFKBFBHMAXX
#include <iostream>
using namespace std;
int main()
{
char str[35][55];
long int ans = 0;
for(int i=0; i<30; i++)
for(int j=0; j<50; j++)
{
cin >> str[i][j];
}
for(int i=0; i<30; i++)
for(int j=0; j<50; j++)
{
int k;
for(k=1; k+j<50; k++)//列
{
if(str[i][j] < str[i][j+k])
ans++;
}
for(k=1; k+i<30; k++)//行
{
if(str[i][j] < str[i+k][j])
ans++;
}
for(k=1; k+i<30 && j+k<50; k++) //从左上到右下
{
if(str[i+k][j+k] > str[i][j])
ans++;
}
}
for(int i=1; i<30; i++)
for(int j=0; j<50; j++)
{
int k;
for(k=1; i-k>=0 && j+k<50; k++)//左下到右上
{
if(str[i][j] != str[i-k][j+k])
ans++;
}
}
cout << ans << endl;
return 0;
}
4. 杨辉三角形
题目描述:
如果我们按从上到下、从左到右的顺序把所有数排成一列,可以得到如下数列: 1,1,1,1,2,1,1,3,3,1,1,4,6,4,1,…
给定一个正整数N,请你输出数列中第一次出现N是在第几个数?
【输入描述】
输入一个整数N。
【输出描述】
输出一个整数代表答案。
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
LL n;
/* 1 2 1 3 3 1 4 6 4 1 5 10 10 5 可以发现找到第一个出现的一定在左边故右边可以直接删去
1 2
1 3
1 4 6
1 5 10
1 6 15 20
/ / / /
从打斜杠的地方可以发现规律为C(2n,n)
故找到最大的斜行
用t来代表斜行数
最大为1e9;
故求有多少个斜行数满足?
int x;//记录第几个斜行满足
for(int t=0;;t++){
if(1e9<=C(2t,t)){
x=t;
break;
}
}
故解得t=17;
斜线从大到小依次排列第一找到第一个数
再通过二分查找
C(t, k)对应的顺序值为:(t + 1) * t / 2 + k + */
LL C(int x,int k){
LL ans=1;
for(int i=x,j=1;j<=k;i--,j++){
ans=ans*i/j;
if(ans>n)return ans;
}
return ans;
}
bool check(int x){
LL l=2*x,r=max(n,l);
while(l<r){
int mid=l+r>>1;
if(C(mid,x)>=n)r=mid;
else l=mid+1;
}
if(C(r,x)!=n)return false;
cout<<(LL)(r+1)*r/2+x+1<<endl;
return true;
}
int main(){
cin>>n;
for(int t=17;;t--){
if(check(t))break;
}
return 0;
}
5. 跳跃
题目描述:
小蓝在一个n行m列的方格图中玩一个游戏。
开始时,小蓝站在方格图的左上角,即第1行第1列。
小蓝可以在方格图上走动,走动时,如果当前在第r行第c列,他不能走到行号比r小的行,也不能走到列号比c 小的列。同时,他一步走的直线距离不超过3。
例如,如果当前小蓝在第3行第5列,他下一步可以走到第3行第6列、第3行第7列、第3行第8列、第4行第5列、第4行第6列、第4行第7列、第5行第5列、第5行第6列、第6行第5列之一。
小蓝最终要走到第n行第m列。
在图中,有的位置有奖励,走上去即可获得,有的位置有惩罚,走上去就要接受惩罚。奖励和惩罚最终抽象成一个权值,奖励为正,惩罚为负。
小蓝希望,从第1行第1列走到第n行第m列后,总的权值和最大。请问最大是多少?
【输入描述】
输入的第一行包含两个整数n, m,表示图的大小。
接下来n行,每行m个整数,表示方格图中每个点的权值。其中,1≤n ≤100,-104≤权值≤104。
【输出描述】
输出一个整数,表示最大权值和。
//宽度搜索
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
const int N = 110;
int n, m;
int map[N][N];
int res = -1e9;
int px[9] = { 0,0,0,1,2,3,1,1,2 }, py[9] = { 1,2,3,0,0,0,1,2,1 };
void bfs(int x, int y, int sum) {
if (x == n && y == m) {
res = max(sum, res);
}
else {
for (int i = 0; i < 9; i++) {
int px1 = x + px[i];
int py1 = y + py[i];
if (px1 <= n && py1 <= m) {
int sum1 = map[px1][py1] + sum;
bfs(px1, py1, sum1);
}
}
}
}
int main() {
cin >> n >> m;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cin >> map[i][j];
}
}
bfs(1, 1, map[1][1]);
cout << res << endl;
}
6. 路径
题目描述:
小蓝学习了最短路径之后特别高兴,他定义了一个特别的图,希望找到图中的最短路径。
小蓝的图由2021个结点组成,依次编号1至2021。
对于两个不同的结点a, b,如果a和b的差的绝对值大于21,则两个结点之间没有边相连;如果a和b的差的绝对值小于等于21,则两个点之间有一条长度为a和 b的最小公倍数的无向边相连。
例如:结点1和结点23之间没有边相连;结点3和结点24之间有一条无向边,长度为24;结点15和结点25之间有一条无向边,长度为75。
请计算,结点1和结点2021之间的最短路径长度是多少。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
//动态规划
int dp[2022];
//求最小公倍数
int fun(int a,int b){
int maxv = max(a, b);
int minv = min(a, b);
for(int i = maxv; ;i+=maxv){
if(i % minv == 0){
return i;
}
}
return 1;
}
int main(){
//第一层循环遍历所有节点1~202 for(int i = 1; i < 2022; i++){
//第二层循环遍历这个i节点的前21个节点
for(int j = i+1; j <= i + 21; j++){
//如果j超出下标就退出循环
if(j >= 2022){
break;
}
//最小公倍数,即i与j之间的距离
int num = fun(i, j);
if(dp[j] == 0){
//第一次来到这个节点的路径长度是 来到i的距离 + i来到j的距离
dp[j] = num + dp[i];
}else{
//如果不是第一次来到这个节点那就看来 i节点的距离 + i来到j的距离 与 上次来到j的距离比较 要更小那个
dp[j] = min(dp[j], num + dp[i]);
}
}
}
cout << dp[2021] << endl;
return 0;
}
7. 迷宫
题目描述:
下图给出了一个迷宫的平面图,其中标记为1的为障碍,标记为0的为可以通行的地方。
010000
000100
00100 110000
2
3
4
迷宫的入口为左上角,出口为右下角,在迷宫中,只能从一个位置走到这个它的上、下、左、右四个方向之一。
对于上面的迷宫,从入口开始,可以按DRRURRDDDR的顺序通过迷宫,一共10步。其中D、U、L、R分别表示向下、向上、向左、向右走。对于下面这个更复杂的迷宫(30行50列),请找出一种通过迷宫的方式,其使用的步数最少,在步数最少的前提下,请找出字典序最小的一个作为答案。
请注意在字典序中D<L<R<U。
01010101001011001001010110010110100100001000101010
0000100010000010101001000010000000100110011010010 01111011010010001000001101001011100011000000010000
0100000000101010001101000010100000101010101100101 00011111000000101000010010100010100000101100000000
1100100011010100001010110001101001101010101111011 00011011010101001001001010000001000101001110000000
10100000101000100110101010111110011000010000111010
0011100000101010000110001000000100010100110000100 11000110100001110010001001010101010101010001101000
0001000010010000010100101010111010001010101000010 11100100101001001000010000010101010100100100010100
0000001000000010101100111101000110000010101010001 10101010011100001000011000010110011110110100001000
1010101010000110101010010100001010000011101110100 10000000101100010000101100101101001011100000000100
1010100100000001010010000100010000010001111010100 0010100101010110100101010001101010110111000011010 11001010000100001100000010100101000001000111000010
0000100011000011010110100000010010100100100001110 1010010100010100000000111011001011010110101010000 0010100001000011010101000010001000100100010001010 10100001000110010001000010101001010101011111010010
00000100101000000110010100101001000001000000000010
11010000001001110111001001000011101001011011101000
0000011010001000100010000000100001110100000011001 10101000101000100010001111100010101001010000001000
10000010100101001010110000000100101010001011101000
0011110000100001000000011011100000000100000000101 10000001100111010111010001000110111010101101111000
#include <iostream>
#include <algorithm>
#include <string>
#include <string.h>
#include <queue>
using namespace std;
char a[40][60]; //存图
int nextx[4] = { 1,0,0,-1 }, nexty[4] = { 0,-1,1,0 }; //D<L<R<U 字典序直接把方向数组处理好就可以了
int dist[40][60]; //定义一个dist数组,用来存放各点到终点的最短距离
char dir[4] = { 'D','L','R','U' };
bool check(int x, int y) {
return x > 0 && y > 0 && x <= 50 && y <= 50 && a[x][y] == '0'&&dist[x][y] == -1;
}
void bfs() { //BFS扫一遍,求出各点到终点的最短距离
queue<pair<int, int> >q;
memset(dist, -1, sizeof(dist));
dist[30][50] = 0;
q.push({ 30,50 });
while (!q.empty()) {
pair<int ,int> t = q.front();
q.pop();
for (int i = 0; i < 4; i++) {
int newx = t.first + nextx[i];
int newy = t.second + nexty[i];
if (check(newx, newy)) {
dist[newx][newy] = dist[t.first][t.second] + 1;
q.push({ newx,newy });
}
}
}
}
int main() {
for (int i = 1; i <= 30; i++)
for (int j = 1; j <= 50; j++)
cin >> a[i][j];
bfs();
int x = 1, y = 1; //从起点开始遍历
string res; //存答案
while (x != 30 || y != 50) {
for (int i = 0; i < 4; i++) {
int newx = x + nextx[i];
int newy = y + nexty[i];
if (newx > 0 && newy > 0 && newx <= 50 && newy <= 50 && a[newx][newy] == '0'&&dist[newx][newy]==dist[x][y]-1) {
x = newx, y = newy;
res += dir[i];
break;
}
}
}
cout << res << "\n";
return 0;
}
8. 装饰珠
题目描述:
在怪物猎人这一款游戏中,玩家可以通过给装备镶嵌不同的装饰珠来获取相应的技能,以提升自己的战斗能力。
已知猎人身上一共有6件装备,每件装备可能有若干个装饰孔,每个装饰孔有各自的等级,可以镶嵌一颗小于等于自身等级的装饰珠(也可以选择不镶嵌)。
装饰珠有M种,编号1至M,分别对应M种技能,第i种装饰珠的等级为Li,只能镶嵌在等级大于等于Li的装饰孔中。
对第à种技能来说,当装备相应技能的装饰珠数量达到K;个时,会产生W;(K;)的价值。镶嵌同类技能的数量越多,产生的价值越大,即W;(K;—1)<Wi(Ki)。但每个技能都有上限P;(1≤P≤7),当装备的珠子数量超过P时,只会产生W:( P)的价值。
对于给定的装备和装饰珠数据,求解如何镶嵌装饰珠,使得6件装备能得到的总价值达到最大。
【输入描述】
输入的第1至6行,包含6件装备的描述。其中第i行的第一个整数N表示第à件装备的装饰孔数量。后面紧接着ⅣN个整数,分别表示该装备上每个装饰孔的等级L (1≤L≤4)。
第7行包含一个正整数M,表示装饰珠(技能)种类数量。
第8至M+7行,每行描述一种装饰珠(技能)的情况。每行的前两个整数Lj (1 ≤Lj≤4)和P; (1≤P≤7)分别表示第j种装饰珠的等级和上限。接下来P个整数,其中第k个数表示该装备中装饰珠数量为k时的价值W;(k)。其中,1≤N≤50,1 ≤M ≤104,1≤ W;(k)≤104。
【输出描述】
输出一行包含一个整数,表示能够得到的最大价值。
#include <bits/stdc++.h>
using namespace std;
int MonsterHunter() {
//6件装备
vector<int> level(5, 0); //level[i]表示6件装备总共可以装饰level[i]棵装饰珠
for (int i = 0; i < 6; i++) { //循环输入6件装备的每个装饰孔
int n, temp;
cin >> n; //装饰孔数量
for (int j = 0; j < n; j++) {
cin >> temp; //装饰孔等级
switch (temp) { //计算每个等级最多可以装饰多少件
case 4:
level[4] += 1;
case 3:
level[3] += 1;
case 2:
level[2] += 1;
case 1:
level[1] += 1;
break; //到1级的才break,因为高等级的孔可以装低等级的装饰珠
default:
break;
}
}
}
int M; //装饰珠子种类数量
cin >> M;
vector<vector<int> > weighttable(4, vector<int>(8, 0)); //最优价值表weighttable[i][j]表示等级(i+1)数量为(j)时的最优价值取值
for (int i = 0; i < M; i++) { //根据输入的装饰珠构建最优价值表
int L, P;
cin >> L >> P; //装饰珠等级,上限
for (int j = 1; j <= P; j++) {
int temp; cin >> temp;
if (weighttable[L - 1][j] < temp) { //如果当前装饰珠数量的价值大于原来的价值,则替换
weighttable[L - 1][j] = temp;
if ((j + 1 > P) && P < 7) { //恰好又是上限的话,剩下的全填上限值
for (int k = j + 1; k <= 7; k++) weighttable[L - 1][k] = weighttable[L - 1][k - 1];
}
}
}
}
int maxweight = INT_MIN;
//循环4次,因为一共有4个等级
for (int i = 0; i <= (level.at(4)); i++) {
for (int j = 0; j <= (level.at(3) - i); j++) {
for (int k = 0; k <= (level.at(2) - (i + j)); k++) {
for (int s = 0; s <= (level.at(1) - (i + j + k)); s++) {
int a, b, c, d; //超出装备上限的一律取最后一个数
if (i > 7) a = 7; else a = i;
if (j > 7) b = 7; else b = j;
if (k > 7) c = 7; else c = k;
if (s > 7) d = 7; else d = s;
maxweight = max(maxweight, weighttable[3][a] + weighttable[2][b] + weighttable[1][c] + weighttable[0][d]);
}
}
}
}
return maxweight; //返回计算的最大值
}
int main()
{
// 请在此输入您的代码
cout << MonsterHunter() <<endl;
return 0;
}
9. 明码
题目描述:
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
汉字的字形存在于字库中,即便在今天,16点阵的字库也仍然使用广泛。
16点阵的字库把每个汉字看成是16× 16个像素信息。并把这些信息记录在字节中。
一个字节可以存储8位信息,用32个字节就可以存一个汉字的字形了。把每个字节转为2进制表示,1表示墨迹,0表示底色。每行2个字节,一共16行,布局是:
第1字节,第2字节
第3字节,第4字节
... ...
第31字节,第32字节
2
3
4
这道题目是给你一段多个汉字组成的信息,每个汉字用32个字节表示,这里给出了字节作为有符号整数的值。题目的要求隐藏在这些信息中。你的任务是复原这些汉字的字形,从中看出题目的要求,并根据要求填写答案。这段信息是(一共10个汉字)∶
4 0 4 0 4 0 4 32 -1 -16 4 32 4 32 4 32 4 32 4 32 8 32 8 32 16 34 16 34 32 30 -64 0
16 64 16 64 34 68 127 126 66 -124 67 4 66 4 66 -124 126 100 66 36 66 4 66 4 66 4 126 4 66 40 0 16
4 0 4 0 4 0 4 32 -1 -16 4 32 4 32 4 32 4 32 4 32 8 32 8 32 16 34 16 34 32 30 -64 0
0 -128 64 -128 48 -128 17 8 1 -4 2 8 8 80 16 64 32 64 -32 64 32 -96 32 -96 33 16 34 8 36 14 40 4
4 0 3 0 1 0 0 4 -1 -2 4 0 4 16 7 -8 4 16 4 16 4 16 8 16 8 16 16 16 32 -96 64 64
16 64 20 72 62 -4 73 32 5 16 1 0 63 -8 1 0 -1 -2 0 64 0 80 63 -8 8 64 4 64 1 64 0 -128
0 16 63 -8 1 0 1 0 1 0 1 4 -1 -2 1 0 1 0 1 0 1 0 1 0 1 0 1 0 5 0 2 0
2 0 2 0 7 -16 8 32 24 64 37 -128 2 -128 12 -128 113 -4 2 8 12 16 18 32 33 -64 1 0 14 0 112 0
1 0 1 0 1 0 9 32 9 16 17 12 17 4 33 16 65 16 1 32 1 64 0 -128 1 0 2 0 12 0 112 0
0 0 0 0 7 -16 24 24 48 12 56 12 0 56 0 -32 0 -64 0 -128 0 0 0 0 1 -128 3 -64 1 -128 0 0
10
#include <iostream>
using namespace std;
struct Character
{
char bytes[32];
};
Character characters[] = {
{4,0,4,0,4,0,4,32,-1,-16,4,32,4,32,4,32,4,32,4,32,8,32,8,32,16,34,16,34,32,30,-64,0},
{16,64,16,64,34,68,127,126,66,-124,67,4,66,4,66,-124,126,100,66,36,66,4,66,4,66,4,126,4,66,40,0,16},
{4,0,4,0,4,0,4,32,-1,-16,4,32,4,32,4,32,4,32,4,32,8,32,8,32,16,34,16,34,32,30,-64,0},
{0,-128,64,-128,48,-128,17,8,1,-4,2,8,8,80,16,64,32,64,-32,64,32,-96,32,-96,33,16,34,8,36,14,40,4},
{4,0,3,0,1,0,0,4,-1,-2,4,0,4,16,7,-8,4,16,4,16,4,16,8,16,8,16,16,16,32,-96,64,64},
{16,64,20,72,62,-4,73,32,5,16,1,0,63,-8,1,0,-1,-2,0,64,0,80,63,-8,8,64,4,64,1,64,0,-128},
{0,16,63,-8,1,0,1,0,1,0,1,4,-1,-2,1,0,1,0,1,0,1,0,1,0,1,0,1,0,5,0,2,0},
{2,0,2,0,7,-16,8,32,24,64,37,-128,2,-128,12,-128,113,-4,2,8,12,16,18,32,33,-64,1,0,14,0,112,0},
{1,0,1,0,1,0,9,32,9,16,17,12,17,4,33,16,65,16,1,32,1,64,0,-128,1,0,2,0,12,0,112,0},
{0,0,0,0,7,-16,24,24,48,12,56,12,0,56,0,-32,0,-64,0,-128,0,0,0,0,1,-128,3,-64,1,-128,0,0}
};
void printByte(char byte) {
char bytes[8] = { 0 };
for (int i = 7; i >= 0; --i) {
bytes[i] = byte % 2;
byte >>= 1;
}
for (int i = 0; i < 8; ++i) {
if (bytes[i])
cout << "*";
else
cout << " ";
}
}
void printCharacter(char bytes[])
{
for (int i = 0; i < 32; ++i)
{
printByte(bytes[i]);
if (i != 0 && (i + 1) % 2 == 0)
cout << endl;
}
}
int main()
{
for (int i = 0; i < 10; ++i)
{
printCharacter(characters[i].bytes);
cout << endl;
}
return 0;
}
10. 字串分值
题目描述:
对于一个字符串S,我们定义S的分值f(S)为S中恰好出现一次的字符个数。例如f (aba)= 1,f (abc)= 3, f (aaa)= 0。现在给定一个字符串 So…n—1(长度为n,1<n ≤105),请你计算对于所有S的非空子串S;…j(0≤i≤j< n),f(Si…j)的和是多少。
【输入描述】
输入一行包含一个由小写字母组成的字符串 S。
【输出描述】
输出一个整数表示答案。
#include<bits/stdc++.h>
using namespace std;
//子串分值和字串分值和有点类似,但是该题f(S)统计的是子串中只出现一次的字符的个数
//而子串分值和中统计的是子串中出现的不同字符的个数,很显然,该题需要考虑更多条件,
//即是需要知道该字母上一次出现的位置和下一次出现的位置,通过相减得到前后子串的长度(子串长度就是子串的子串数)
//通过前后子串的子串数相乘便得到前后子串连在一起的大子串的子串数
typedef long long ll;
const int N=1e5+10;
ll l[N];//字符左边同字符的下标
ll r[N];//字符右边同字符的下标
ll vis[30];//通过ascll码为下标存储字母下标,ascll通过字母-'a'取得。该数组在给left和right赋值前都要初始化。分别是0和size()+1;
char a[N];
int main(){
string s;cin>>s;
for(int i=1;i<=s.size();i++)a[i]=s[i-1];
memset(vis,0,sizeof(vis));
for(int i=1;i<=s.size();i++){
int k=a[i]-'a';
l[i]=vis[k];
vis[k]=i;
}
for(int i=0;i<30;i++)vis[i]=s.size()+1;
for(int i=s.size();i>=1;i--){
int k=a[i]-'a';
r[i]=vis[k];
vis[k]=i;
}
//------------->digo!左右位置赋值完成~
//直接遍历一遍赋值就没问题了!
ll ans=0;
for(int i=1;i<=s.size();i++){
ans+=(i-l[i])*(r[i]-i);
}
cout<<ans<<endl;
return 0;
}
11. 作物杂交
题目描述:
作物杂交是作物栽培中重要的一步。已知有Ⅳ种作物(编号1至N ),第i种作物从播种到成熟的时间为T。作物之间两两可以进行杂交,杂交时间取两种中时间较长的一方。如作物A种植时间为5天,作物B种植时间为7天,则AB杂交花费的时间为7天。作物杂交会产生固定的作物,新产生的作物仍然属于Ⅳ种作物中的一种。
初始时,拥有其中M种作物的种子(数量无限,可以支持多次杂交)。同时可以进行多个杂交过程。求问对于给定的目标种子,最少需要多少天能够得到。
如存在4种作物ABCD,各自的成熟时间为5天、7天、3天、8天。初始拥有AB两种作物的种子,目标种子为D,已知杂交情况为A×B→C,A×C→D。则最短的杂交过程为:
第1天到第7天(作物B的时间),A×B→C。
第8天到第12天(作物A的时间),A× C→D。
花费12天得到作物D的种子。
【输入描述】
输入的第1行包含4个整数N ,M , K ,T,N表示作物种类总数(编号1至N),M表示初始拥有的作物种子类型数量,K表示可以杂交的方案数,T表示目标种子的编号。
第2行包含N个整数,其中第i个整数表示第i种作物的种植时间T (1≤T≤100)。
第3行包含M个整数,分别表示已拥有的种子类型K;(1≤K;≤M),K;两两不同。
第4至K+3行,每行包含3个整数A,B,C,表示第A类作物和第B类作物杂交可以获得第C类作物的种子。其中,1≤N≤2000,2≤M≤N,1≤K <105,1≤T≤N,保证目标种子一定可以通过杂交得到。
【输出描述】
输出一个整数,表示得到目标种子的最短杂交时间。
#include <iostream>
#include <algorithm>
#include <queue>
#include <cstring>
using namespace std;
const int maxn = 2020;
const int maxk = 2E5+10;
int grow[maxn];
bool have[maxn];
int edge[maxk], head[maxn], ne[maxk], cost[maxk], target[maxk], idx = 1;
int getcost(int u, int v)
{return max(grow[u], grow[v]);}
void add(int u, int v, int c, int t)
{
edge[idx] = v;
cost[idx] = c;
ne[idx] = head[u];
head[u] = idx;
target[idx] = t;
idx++;
}
struct Node{
int id, cost;
bool operator > (const Node &x) const
{return cost > x.cost;}
};
priority_queue<Node, vector<Node>, greater<Node> > heap;
int dist[maxn];
int main()
{
int N, M, K, T;
cin >> N >> M >> K >> T;
memset(dist, 0x3f, sizeof dist);
for(int i = 1; i <= N; ++i)
cin >> grow[i];
for(int i = 0; i < M; ++i)
{
int u;
cin >> u;
have[u] = 1;
dist[u] = 0;
}
for(int i = 0; i < K; ++i)
{
int u, v, c, t;
cin >> u >> v >> t;
c = getcost(u, v);
if(have[u] && have[v] && c < dist[t])
{
dist[t] = c;
Node temp = {t, c};
heap.push(temp);
}
add(u, v, c, t);
add(v, u, c, t);
}
while(!have[T])
{
Node p = heap.top();
heap.pop();
if(!have[p.id])
{
have[p.id] = 1;
for(int i = head[p.id]; i; i = ne[i])
{
int to = edge[i], c = cost[i], tar = target[i];
int bet = dist[p.id];
if(!have[tar] && have[to] && bet+c < dist[tar])
{
dist[tar] = bet+c;
Node temp = {tar, dist[tar]};
heap.push(temp);
}
}
}
}
cout << dist[T];
return 0;
}
12. 承压计算
题目描述:
×星球的高科技实验室中整齐地堆放着某批珍贵金属原料。
每块金属原料的外形、尺寸完全一致,但重量不同。金属材料被严格地堆放成金字塔形。
7
5 8
7 8 8
9 2 7 2
8 1 4 9 1
8 1 8 8 4 1
7 9 6 1 4 5 4
5 6 5 5 6 9 5 6
5 5 4 7 9 3 5 5 1
7 5 7 9 7 4 7 3 3 1
4 6 4 5 5 8 8 3 2 4 3
1 1 3 3 1 6 6 5 5 4 4 2
9 9 9 2 1 9 1 9 2 9 5 7 9
4 3 3 7 7 9 3 6 1 3 8 8 3 7
3 6 8 1 5 3 9 5 8 3 8 1 8 3 3
8 3 2 3 3 5 5 8 5 4 2 8 6 7 6 9
8 1 8 1 8 4 6 2 2 1 7 9 4 2 3 3 4
2 8 4 2 2 9 9 2 8 3 4 9 6 3 9 4 6 9
7 9 7 4 9 7 6 6 2 8 9 4 1 8 1 7 2 1 6
9 2 8 6 4 2 7 9 5 4 1 2 5 1 7 3 9 8 3 3
5 2 1 6 7 9 3 2 8 9 5 5 6 6 6 2 1 8 7 9 9
6 7 1 8 8 7 5 3 6 5 4 7 3 4 6 7 8 1 3 2 7 4
2 2 6 3 5 3 4 9 2 4 5 7 6 6 3 2 7 2 4 8 5 5 4
7 4 4 5 8 3 3 8 1 8 6 3 2 1 6 2 6 4 6 3 8 2 9 6
1 2 4 1 3 3 5 3 4 9 6 3 8 6 5 9 1 5 3 2 6 8 8 5 3
2 2 7 9 3 3 2 8 6 9 8 4 4 9 5 8 2 6 3 4 8 4 9 3 8 8
7 7 7 9 7 5 2 7 9 2 5 1 9 2 6 5 3 9 3 5 7 3 5 4 2 8 9
7 7 6 6 8 7 5 5 8 2 4 7 7 4 7 2 6 9 2 1 8 2 9 8 5 7 3 6
5 9 4 5 5 7 5 5 6 3 5 3 9 5 8 9 5 4 1 2 6 1 4 3 5 3 2 4 1
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
其中的数字代表金属块的重量(计量单位较大)。最下一层的X代表30台极高精度的电子秤。
假设每块原料的重量都十分精确地平均落在下方的两个金属块上,最后,所有的金属块的重量都严格精确地平分落在最底层的电子秤上。
电了秤的计量单位很小,所以显示的数字很大。
工作人员发现,其中读数最小的电子秤的示数为:2086458231请你推算出:读数最大的电子秤的示数为多少?
#include<stdio.h>
int main(){
double a[30][30]={{7},
{5,8},
{7,8,8},
{9,2,7,2},
{8,1,4,9,1},
{8,1,8,8,4,1},
{7,9,6,1,4,5,4},
{5,6,5,5,6,9,5,6},
{5,5,4,7,9,3,5,5,1},
{7,5,7,9,7,4,7,3,3,1},
{4,6,4,5,5,8,8,3,2,4,3},
{1,1,3,3,1,6,6,5,5,4,4,2},
{9,9,9,2,1,9,1,9,2,9,5,7,9},
{4,3,3,7,7,9,3,6,1,3,8,8,3,7},
{3,6,8,1,5,3,9,5,8,3,8,1,8,3,3},
{8,3,2,3,3,5,5,8,5,4,2,8,6,7,6,9},
{8,1,8,1,8,4,6,2,2,1,7,9,4,2,3,3,4},
{2,8,4,2,2,9,9,2,8,3,4,9,6,3,9,4,6,9},
{7,9,7,4,9,7,6,6,2,8,9,4,1,8,1,7,2,1,6},
{9,2,8,6,4,2,7,9,5,4,1,2,5,1,7,3,9,8,3,3},
{5,2,1,6,7,9,3,2,8,9,5,5,6,6,6,2,1,8,7,9,9},
{6,7,1,8,8,7,5,3,6,5,4,7,3,4,6,7,8,1,3,2,7,4},
{2,2,6,3,5,3,4,9,2,4,5,7,6,6,3,2,7,2,4,8,5,5,4},
{7,4,4,5,8,3,3,8,1,8,6,3,2,1,6,2,6,4,6,3,8,2,9,6},
{1,2,4,1,3,3,5,3,4,9,6,3,8,6,5,9,1,5,3,2,6,8,8,5,3},
{2,2,7,9,3,3,2,8,6,9,8,4,4,9,5,8,2,6,3,4,8,4,9,3,8,8},
{7,7,7,9,7,5,2,7,9,2,5,1,9,2,6,5,3,9,3,5,7,3,5,4,2,8,9},
{7,7,6,6,8,7,5,5,8,2,4,7,7,4,7,2,6,9,2,1,8,2,9,8,5,7,3,6},
{5,9,4,5,5,7,5,5,6,3,5,3,9,5,8,9,5,4,1,2,6,1,4,3,5,3,2,4,1}
};
for(int i=0;i<29;i++){
for(int j=0;j<=i;j++){
a[i+1][j]+=a[i][j]/2;
a[i+1][j+1]+=a[i][j]/2;
}
}
double max=0,min=1000000;
for(int i=0;i<30;i++){
if(max<a[29][i]){
max=a[29][i];
}
if(min>a[29][i]){
min=a[29][i];
}
}
//因为这样加起来最小的一定不会是2086458231,所以他一定存在一个转化问题且题干上说了电子秤的计量单位很小,所以显示的单位很大
printf("%.0lf",max*2086458231/min);
return 0;
}
'
运行运行
13. 全球变暖
题目描述:
你有一张某海域NcN像素的照片,".“表示海洋、”#"表示陆地,如下所示:
.......
.##....
.##....
....##.
..####.
...###.
.......
其中"上下左右"四个方向上连在一起的一片陆地组成一座岛屿。例如上图就有2座岛屿。
由于全球变暖导致了海面上升,科学家预测未来几十年,岛屿边缘一个像素的范围会被海水淹没。具体来说如果一块陆地像素与海洋相邻(上下左右四个相邻像素中有海洋),它就会被淹没。
例如上图中的海域未来会变成如下样子:
.......
.......
.......
.......
....#..
.......
.......
请你计算:依照科学家的预测,照片中有多少岛屿会被完全淹没。
【输入描述】
第一行包含一个整数N (1≤N ≤1000)。
以下N行N列代表张海域照片。
照片保证第1行、第1列、第N行、第N 列的像素都是海洋。
输出一个整数表示答案。
#include<bits/stdc++.h>
using namespace std;
int N;
const int SIZE = 1e4+4;
char area[SIZE][SIZE];
bool flag;
int cnt;
int d[4][2]={
{1,0},
{-1,0},
{0,1},
{0,-1}
};
//注意:求的是被淹没的岛屿的数量 总岛屿数量-被淹没的岛屿的数量
int ans=0;//没有被淹没岛屿的数量
int res_ans=0;//岛屿的总数量
//用DFS判断搜到的这个岛屿会不会被淹没,仅此而已,不需要返回什么 昨判断关系
void dfs(int x,int y)
{
if(flag==false){ //一个岛屿只要有一个点满足就不会变淹没了
cnt = 0;
for(int i=0; i<4; i++){
int tx=d[i][0]+x;
int ty=d[i][1]+y;
if(area[tx][ty]!='.')
cnt++;
}
if(cnt==4){//有一个点满足不会被淹没的条件
ans++;
flag=true;//这个岛屿不需要再遍历了
}
}
area[x][y]='*';//将遍历过的点变为 *,下一次就不会遍历他了,所以不用标记数组
//注意这里不可以是‘.’因为上面if(area[tx][ty]!='.')cnt++
for(int i=0;i<4;i++){
int xx = x + d[i][0];
int yy = y + d[i][1];
if(area[xx][yy]=='#'&&x<N&&x>=0&&y<N&&y>=0)
dfs(xx,yy);
}
}
int main()
{
cin>>N;
for(int i=0; i<N; i++)
for(int j=0; j<N; j++)
cin>>area[i][j];
for(int i=0; i<N; i++){
for(int j=0; j<N; j++){
if(area[i][j]=='#'){
res_ans++;
flag=false;
dfs(i,j);
}
}
}
cout<<res_ans-ans;
return 0;
}
14. 直线
题目描述:
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
在平面直角坐标系中,两点可以确定一条直线。如果有多点在一条直线上,那么这些点中任意两点确定的直线是同—条。
给定平面上2×3个整点
(z, y)0 ≤a <2,0≤y < 3, a ∈ Z,g∈Z,即横坐标是0到1(包含0和1)之间的整数、纵坐标是0到2(包含0和2)之间的整数的点。这些点一共确定了11条不同的直线。
给定平面上20 × 21个整点
(z, gy)|0 <a <20,0≤y <21, a ∈ Z, gy∈Z,即横坐标是0到19(包含0和19)之间的整数、纵坐标是0到20(包含0和20)之间的整数的点。
请问这些点一共确定了多少条不同的直线。
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
struct zhixian{
double k;
double b;
}a[405000];
bool cmp(zhixian q, zhixian w)
{
if(q.k != w.k)
{
return q.k < w.k;
}
else
{
return q.b < w.b;
}
}
int main()
{
int total = 0;
for(int x1 = 0; x1 < 20; x1++)
{
for(int y1 = 0; y1 < 21; y1++)
{
for(int x2 = 0; x2 < 20; x2++)
{
for(int y2 = 0; y2 < 21; y2++)
{
if(x1 != x2)
{
double k = (double)(y2 - y1) / (x2 - x1);
double b = (double)(y2 - k * x2);
a[total++] = {k, b};
}
}
}
}
}
sort(a, a + total, cmp);
int ans = 1;
for(int i = 1; i < total; i++)
{
if(fabs(a[i].k - a[i - 1].k) > 1e-8 || fabs(a[i].b - a[i - 1].b > 1e-8))
{
ans ++;
}
}
cout << ans + 20;
return 0;
}
15. 平面切分
题目描述:
平面上有N条直线,其中第i条直线是y = Ai xc+B;。请计算这些直线将平面分成了几个部分。
【输入描述】
第一行包含一个整数N。
以下N行,每行包含两个整数A,Bi。
其中,1≤N≤1000,—105<Ai,B;≤105
【输出描述】
一个整数代表答案。
分析:
最初的平面个数为1;
每次加入一条直线,它从无穷远处延申,它开始就会把平面分割成两个平面,所以每多一条直线,平面个数就会 +1 ,接下来只用讨论该条直线与先平面中每条直线的情况(相交或者平行)。
当它与现有的一条直线平行时,不会有新的平面产生,(最简单的情况就是原平面只有一条直线,新添加的直线与它平行,平面数= 上一个状态的平面数 + 1)
当它与现有的一条直线a 相交时,平面数就需要+1,形象的理解:把直线a 看做平面的尽头,当它穿过a 后,相当于它进入另外一个平面,又从无穷远处延申,又将该平面一分为二。直线具有无限长的特点。 该种情况下的平面数 = 上一个状态的平面数 +1 +1;
也就是说 在添加一条直线就会多一个平面的基础上,它与直线有交点就会 再 +1; 接下来只需要判断它与 平面内的多少条直线有交点即可。 同时注意,当它与多条线的交点为同一个时,只执行一次 +1,具体情况画出三条线交于一点,和三条线交于两点的情况,一目了然。
#include <iostream>
#include <set>
using namespace std;
typedef pair<int,int> PII;
typedef pair<double,double> PDD;
set<PII>s;
// 记录斜率和拮据
int main()
{
int res = 1;
int n;
cin>>n;
while(n--)
{
int a,b;
cin>>a>>b;
if(s.find({a,b}) != s.end()) // 完全相同的直线只能操作一次
continue;
res++;// 每添加一条直线,平面数都得 +1
set<PDD>jd;// 记录添加一条执行,它与平面内直线的交点(一个交点只能被统计一次)
for(auto it = s.begin();it !=s.end();it++)
{
double x = (it->second - b)*1.0 / (a - it->first); // 计算交点的坐标值(x,y)
double y = a*x+b;
if(a != it->first && (jd.find({x,y})==jd.end() || jd.empty()))
{
res += 1;
jd.insert({x,y});
}
}
s.insert({a,b});
}
cout<<res<<endl;
return 0;
}
相关文章:
【蓝桥杯比赛-C++组-经典题目汇总】
1. 最短路 题目描述: 如下图所示,G是一个无向图,其中蓝色边的长度是1、橘色边的长度是2、绿色边的长度是3。 则从 A 到 S 的最短距离是多少? #include <iostream> #include <cstring> using namespace std; const i…...
redis7基础篇2 redis的主从模式1
目录 一 主从模式 1.1 主从复制的作用 1.2 配置常用命令 1.3 主从复制常见问题 1.4 主从复制的缺点 1.5 redis主从复制原理 二 redis主从复制的搭建流程 2.1 注意事项 2.2 redis的主从复制架构图 2.3 以6379.conf配置文件配置为例 2.4 以6380.conf配置文件配置为例 …...
QT----------QT Data Visualzation
实现思路: 配置项目:在 .pro 文件中添加 QT datavisualization 以引入 QT Data Visualization 模块。创建主窗口:使用 QMainWindow 作为主窗口,添加 Q3DScatter、Q3DBars 和 Q3DSurface 等三维视图组件。初始化和创建三维图表&a…...
默认ip无法访问,利用dhcp功能获取ip进行访问的方法
应用场景: ac的默认ip如192.168.1.1在pc与ac的eth2以后网口直连无法ping通,而且pc改为dhcp自动获取ip也获取不到ip地址,无法进行web配置和命令行操作。 原因是ac或其他设备被修改了默认ip或者端口vlanid,现在的端口vlan对应子接…...
重学 Android 自定义 View 系列(十):带指针的渐变环形进度条
前言 该篇文章根据前面 重学 Android 自定义 View 系列(六):环形进度条 拓展而来。 最终效果如下: 1. 扩展功能 支持进度顺时针或逆时针显示在进度条末尾添加自定义指针图片使用线性渐变为进度条添加颜色效果 2. 关键技术点解析 2.1 进度方向控制的…...
websocket在各主流浏览器中默认的请求头是如何设置的?
谷歌浏览器(Chrome) 在谷歌浏览器中,当创建一个 WebSocket 连接时,会自动添加一些标准的请求头。其中包括Sec - WebSocket - Key,这个是一个 Base64 - 编码的随机值,长度为 16 字节。它用于在服务器端进行安全验证,确保连接的合法性。例如,Sec - WebSocket - Key: dGhl…...
C++之map和set的模拟实现
目录 引言 红黑树迭代器实现 红黑树元素的插入 map模拟实现 set模拟实现 之前我们已经学习了map和set的基本使用,但是因为map和set的底层都是用红黑树进行封装实现的,上期我们已经学习了红黑树的模拟实现,所以本期我们在红黑树模拟实现…...
大学物理(2)期末复习笔记【1】
图片不知道咋回事居然不能直接复制上来,过段时间修改好再编辑一下 9. 振动 一、振动 def:某一物理量在某一数值附近做周期性变化 周期(T):完成一次往复运动所需要的时间(s) 频率(…...
25.1.3
java数组: dataType[] arrayRefVar //推荐写法 //int[] mylist //或 dataType arrayRefVar[] //int mylist[]创建数组对象: arrayRefVar new dataType[arraySize]; dataType[] arrayRefVar new dataType[arraySize];for-each循环: jav…...
数据库知识汇总2
一. 范式 定义:范式是符合某一种级别的关系模式的集合。 关系数据库中的关系必须满足一定的要求。满足不同程度要求的为不同范式; 一个低一级范式的关系模式,通过模式分解(schema decomposition)可以转换为若干个高一…...
SpringBoot:生成条形码的项目
在软件开发中,条形码和二维码的生成与解析是一项常见需求,特别是在商品管理、物流跟踪、支付验证等场景。Spring Boot 作为一个流行的微服务框架,提供了快速构建应用的能力。本文将介绍如何在 Spring Boot 项目中生成条形码,并提供…...
docker内外如何实现ROS通信
写在前面 在一台电脑上装有docker,docker内外均装有ROS系统,现在想要实现docker内外的ROS通信,怎么办呢? 首先,因为是同一台电脑的docker内外,所以IP本身是互通的,不需要在/etc/hosts中添加IP…...
leetcode 面试经典 150 题:多数元素
链接多数元素题序号169题型数组解法1. 排序法、2. Boyer-Moore投票算法难度简单熟练度✅✅✅✅✅ 题目 给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的…...
SpringBoot返回文件让前端下载的几种方式
01 背景 在后端开发中,通常会有文件下载的需求,常用的解决方案有两种: 不通过后端应用,直接使用nginx直接转发文件地址下载(适用于一些公开的文件,因为这里不需要授权)通过后端进行下载&#…...
论述数据、数据库、数据库管理系统、数据库系统的概念。
数据是指描述事物特征的符号记录,可以是数字、文字、图像、音频等形式。数据在现代社会中广泛存在于各个领域,对于组织和管理数据,提供数据的可靠性、一致性和安全性至关重要。 数据库是一个有组织的数据集合,它存储在计算机系统…...
【深度学习基础之多尺度特征提取】多尺度卷积神经网络(MS-CNN)是如何在深度学习网络中提取多尺度特征的?附代码(二)
【深度学习基础之多尺度特征提取】多尺度卷积神经网络(MS-CNN)是如何在深度学习网络中提取多尺度特征的?附代码(二) 【深度学习基础之多尺度特征提取】多尺度卷积神经网络(MS-CNN)是如何在深度…...
企业AAA认证的好处
体系认证#ISO三体系认证 #三体系认证好处 #企业双软认证好处 #ISO体系认证有哪些#体系认证办理流程及费用#招投标#招投标必备资质 企业信用评级AAA认证 办理条件及流程! 一、企业申请3A认证好处有哪些? 1.提高企业信誉: 拥有3A企业信用等级证书意味…...
PyTorch AMP 混合精度中grad_scaler.py的scale函数解析
PyTorch AMP 混合精度中的 scale 函数解析 混合精度训练(AMP, Automatic Mixed Precision)是深度学习中常用的技术,用于提升训练效率并减少显存占用。在 PyTorch 的 AMP 模块中,GradScaler 类负责动态调整和管理损失缩放因子&…...
分数阶傅里叶变换代码 MATLAB实现
function Faf myfrft(f, a) %分数阶傅里叶变换函数 %输入参数: %f:原始信号 %a:阶数 %输出结果: %原始信号的a阶傅里叶变换N length(f);%总采样点数 shft rem((0:N-1)fix(N/2),N)1;%此项等同于fftshift(1:N),起到翻…...
腾讯云OCR在制造业的应用:内存模组产品识别实战指南
腾讯云OCR在制造业的应用 一、 背景二、 腾讯云OCR技术概述三、 内存模组产品识别需求四、基于腾讯云OCR的内存模组产品识别4.1、准备工作4.2、API调用与代码实现 五、 代码示例六、 应用场景七、 总结 一、 背景 制造业在产品识别环节经历着前所未有的挑战。传统的依赖人工进…...
基于STM32F1的基本定时器的原理
一,基本定时器原理 1,进入数据手册,了解基本定时器的主要特征 2,看懂理解基本定时器框图 3,查阅2.3章中的存储器映像以及时钟树就可以知道定时器是挂载在哪个总线下,从而知道对应是时钟频率 4,…...
Adobe Acrobat Pro DC 2023 下载安装教程,附详细图文
简介: Adobe Acrobat Pro DC 2023 是由 Adobe 公司推出的一款全面的 PDF 编辑、查看和管理软件。这款软件无论是个人用户还是企业级用户,都可以凭借其强大的功能满足不同的需求。作为一款业内领先的 PDF 处理工具,Adobe Acrobat Pro DC 不仅…...
活动预告 |【Part1】 Azure 在线技术公开课:迁移和保护 Windows Server 和 SQL Server 工作负载
课程介绍 通过 Microsoft Learn 免费参加 Microsoft Azure 在线技术公开课,掌握创造新机遇所需的技能,加快对 Microsoft 云技术的了解。参加我们举办的“迁移和保护 Windows Server 和 SQL Server 工作负载”活动,了解 Azure 如何为将工作负载…...
根据 el-dialog 的高度动态计算 el-table 的高度
根据 el-dialog 的高度动态计算 el-table 的高度,可以使用 Vue 的 ref 和生命周期钩子来实现。以下是一个实现方案: 首先,给 el-dialog 和 el-table 添加 ref: <el-dialogv-model"testInstrumentDialogVisible"tit…...
算法解析-经典150(双指针、滑动窗口)
文章目录 双指针1.验证回文串1.答案2.思路 2.判断子序列1.动态规划解法2.双指针 3.两数之和 II - 输入有序数组1.答案2.思路 4.盛最多水的容器1.答案2.思路 5.三数之和1.答案2.思路 滑动窗口1.长度最小的子数组1.答案2.思路 2.无重复字符的最长子串1.答案2.思路 3.最小覆盖子串…...
Postman[2] 入门——界面介绍
可参考官方 文档 Postman 导航 | Postman 官方帮助文档中文版Postman 拥有各种工具、视图和控件,帮助你管理 API 项目。本指南是对 Postman 主要界面区域的高级概述:https://postman.xiniushu.com/docs/getting-started/navigating-postman 1. Header&a…...
GAMES101学习笔记(一):Overview 计算机图形学概述
文章目录 关于计算机图形学本课程讨论的话题光栅化曲线和网格光线追踪动画/仿真 课程大纲CG vs CV图形学的依赖学科线性代数回顾 课程资源:GAMES101-现代计算机图形学入门-闫令琪 Lec1 ~ Lec2 学习笔记: Lecture 01 :Overview of Computer G…...
iOS 18手机不越狱玩MC java版---PojavLauncher
环境 手机: iPhone SE 3 iOS: 18.1.1 电脑操作系统:macOS Sequoia 15.1.1 步骤 电脑上安装altstore https://altstore.io/ 直接下载自己操作系统对应的版本即可。 安装altstore到手机 以下是我记忆中的步骤,关键步骤我提一下 手机连接…...
uni-app开发-习惯养成小程序/app介绍
目录 一:功能概述 二:功能部分代码和截图 一:功能概述 1 习惯目标生成 创建习惯:用户可以添加新的习惯目标,每个习惯可以包含名称、描述、图标、目标天数。 关联习惯完成:用户通过设定达成目标以后,生成习惯养成记录。 2 习惯打卡 简单快捷的打卡:提供一个直观的界面…...
服务器迁移中心——“工作组迁移”使用指南
简介 服务器迁移中心(Server Migration Center,简称SMC)是阿里云提供给您的迁移平台。专注于提供能力普惠、体验一致、效率至上的迁移服务,满足您在阿里云的迁移需求。 工作组迁移是SMC的一项功能,提供标准化迁移流程…...
下载离线的瓦片图是做了模糊处理嘛?
问题: 1.下载离线的瓦片图是做了模糊处理嘛? 2.怎么加载自己的离线瓦片图比实际图片模糊了很多?啊 3.同层级的图片都比实际的图片模糊 原因:https://zhuanlan.zhihu.com/p/389945647 可以尝试下略微优化下: 1.降低…...
日志聚类算法 Drain 的实践与改良
在现实场景中,业务程序输出的日志往往规模庞大并且类型纷繁复杂。我们在查询和查看这些日志时,平铺的日志列表会让我们目不暇接,难以快速聚焦找到重要的日志条目。 在观测云中,我们在日志页面提供了聚类分析功能,可以…...
git 问题解决记录
在用git上传文件到仓库中出现了2个问题 第一个问题: 需要修改git的代理端口与电脑自己的代理服务器设置中的端口和VPN的端口保持一致, 比如我的端口是7897,就设置 git config --global http.proxy http://127.0.0.1:7897 git config --glo…...
Node Exporter常用Prometheus指标
Node Exporter 是一个常用的 Prometheus 导出器,用于采集主机操作系统层面的指标。以下是 Node Exporter 中一些常用的指标分类和关键指标: 1. CPU 相关指标 常用指标: CPU 使用率 rate(node_cpu_seconds_total{mode!"idle"}[5m]…...
golang 编程规范 - 项目目录结构
原文:https://makeoptim.com/golang/standards/project-layout 目录结构 Go 目录 cmdinternalpkgvendor 服务端应用程序目录 api Web 应用程序目录 web 通用应用程序目录 buildconfigsdeploymentsinitscriptstest 其他目录 assetsdocsexamplesgithooksthird_par…...
【ArcGISPro/GeoScenePro】裁剪和打包栅格数据
检查并处理扫描地图 数据 https://arcgis.com/sharing/rest/content/items/535efce0e3a04c8790ed7cc7ea96d02d/data 使用标准相机或扫描仪创建的数字影像通常存储在 RGB 颜色模型中,这意味着这些影像将由红色、绿色和蓝色三个栅格组成。 此扫描地图在提供给您之前已在坐标系…...
数据库新建用户后(Host:%),报错:localhost无法连接
存在问题 在给数据库(MySQL、MariaDB等)创建了新的用户名(eg:maxscale)后,无法使用新用户名登录,并报如下错误:ERROR 1045 (28000): Access denied for user maxscalelocalhost (us…...
[文献阅读] Reducing the Dimensionality of Data with Neural Networks
文章目录 摘要Abstract:RBM自编码器深层自编码器初始化展开微调 实验总结 摘要 Reducing the Dimensionality of Data with Neural Networks Reducing the Dimensionality of Data with Neural Networks | Science 使用神经网络降低数据的维度 由Hinton在2006年于Science上发…...
Sublime Text4 4189 安装激活【 2025年1月3日 亲测可用】
-----------------测试时间2025年1月3日------------------- 下载地址 官方网址:https://www.sublimetext.com 更新日志:https://www.sublimetext.com/download V4189 64位:https://www.sublimetext.com/download_thanks?targetwin-x64 ....…...
自相关性的数值越接近于1说明什么
自相关性数值越接近于 1,通常表明以下几点: 1. 强正相关 - 自相关系数接近于 1 表示当前值与其滞后值之间存在强正相关关系。这意味着,当当前值较高时,之前的值也倾向于较高,反之亦然。 2. 时间序列的持久性 - 如果…...
【ArcGIS Pro微课1000例】0064:栅格目录、栅格数据集、镶嵌数据集
一、栅格目录与栅格数据集 1. 定义 栅格目录:是一个用于管理和组织栅格数据集的结构,通常包含多个栅格数据集的元数据和索引信息。它相当于一个文件夹,里面可以存放多个栅格文件。可以将工作空间转栅格目录。 栅格数据集:是指单个的栅格数据文件,包含了具体的空间数据,…...
单片机-静动态数码管实验
P0控制数码管 ,P0低电平 P1,P2,P3高电平 1、静态数码管 需求:数码管显示0,即让p0端口输出数字0的段码0x3f(共阴) #include "reg52.h" typedef unsigned int u16; typedef unsigned char u8; //数码管显示数字的数组 共阴极 …...
学术写作中的各种流程图如何利用Kimi进行辅助构建?
目录 1.学术论文中的流程图 2.一些小实践 3.论文中严谨的实践流程 近期小编在思考使用AI工具制作流程图和思维导图,结果发现Kimi现在支持流程图了,Kimi在学术写作中的应用变得更加广泛和深入。随着AIGC技术的不断进步,Kimi的功能将更加强大…...
halcon中图像处理及图像滤波
图像滤波简介 图像滤波的方法主要分为两大类:空间域方法和频域方法。 空间域方法是以对图像的像素直接进行处理为基础,包括均值滤波、中值滤波、高斯滤波等;频域方法则是以修改图像在傅里叶变换空间的值为基础的,包括高通滤波、低通滤波、同态滤波等。 1.空间域图像滤波 图…...
【pyqt】(三)designer
designer ui设计 在学习后续的代码之前,我们可以先学习一下designer这款工具,在安装软件的时候我们有提到过,其具体位置在虚拟环境根目录下的\Lib\site-packages\PySide6文件夹中。对于新手而言,使用这种可视化的工具可以帮助我们…...
微服务之服务治理——Eureka
CAP原则: Consistency(一致性):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本) Availability(可用性):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求…...
JS 中 json数据 与 base64、ArrayBuffer之间转换
JS 中 json数据 与 base64、ArrayBuffer之间转换 json 字符串进行 base64 编码 function jsonToBase64(json) {return Buffer.from(json).toString(base64); }base64 字符串转为 json 字符串 function base64ToJson(base64) {try {const binaryString atob(base64);const js…...
C#实现画图,及实现图像运动,C#中GDI+图形图像技术(Graphics类、Pen类、Brush类)C#之快速入门GDI+绘图 C#实现快速画图功能
下载源码 <-------- 在C#的世界里,GDI如同一位多才多艺的艺术家,以其强大的绘图能力,让开发者能够轻松地在应用程序中挥洒创意,绘制出丰富多彩的图形世界。GDI不仅支持基本的几何图形绘制,还能处理复杂的图像处理任…...
32单片机从入门到精通之开发环境——调试工具(七)
在人生的道路上,困难和挫折时常会出现。但是我们不能因此放弃,而是要坚持努力,克服困难,实现自己的梦想。成功不是一蹴而就的,它需要付出大量的努力和坚持不懈的精神。每一次的失败都是一次宝贵的经验,它能…...
多光谱图像的处理和分析方法有哪些?
一、预处理方法 1、辐射校正: 目的:消除或减少传感器本身、大气条件以及太阳光照等因素对多光谱图像辐射亮度值的影响,使得图像的辐射值能够真实反映地物的反射或发射特性。 方法:包括传感器校正和大气校正。传感器校正主要是根…...