第一题0移动距离 - 蓝桥云课其实是一道数学题#include stdio.h #include math.h // 包含 sqrt()、arctan2() 函数 int main() { // 目标点坐标 int target_x 233; int target_y 666; // 1. 计算水平移动距离即目标点到原点的半径 r double r sqrt(target_x * target_x target_y * target_y); // 2. 计算圆心角 θ弧度制arctan2(y, x) 直接返回正确角度 double theta atan2(target_y, target_x); // 范围 (-π, π]此处为正角 // 3. 计算圆周最短弧长r * θθ已为最短夹角 double arc_length r * theta; // 4. 计算总移动距离水平距离 弧长 double total_distance r arc_length; // 输出结果保留2位小数提高可读性 int a(int)total_distance; printf(%d\n,a); return 0; }第三题0可分解的正整数 - 蓝桥云课找规律我们可以发现除了1其余都可以用三个及以上连续的整数表示因为有正有负可以抵消啊但是只有1没法用三个连续的整数表示#includeiostream using namespace std; const int N100010; typedef long long ll; int n; ll a[N]; int main() { cinn; int res0; for(int i1;in;i) { cina[i]; if(a[i]!1)res; } coutresendl; return 0; }第四题这个题目很简单其实就是不断对产值按要求进行调整--》但是容易错的一点就是容易超时--》要想办法优化一下那就还是找规律--》我们发现在这三个调整公式当中如果a,b,c产值相等了那么就没必要调整了在调整也是那些--》可以提前结束我为什么做的时候发现不了哇#includeiostream #includecstring #includealgorithm using namespace std; typedef long long ll; int t; int main() { cint; while(t--) { ll a,b,c,k; cinabck; while(k--) { ll a1a,b1b,c1c; a(b1c1)/2; b(a1c1)/2; c(a1b1)/2; if(abbc)break; } couta b cendl; } return 0; }第五题0画展布置 - 蓝桥云课我一开始一看这个题目--》那不就是dfs暴力枚举吗组合型枚举于是喜提tle那么就先分析一下暴力是怎样暴力的吧我看他是在n副画中挑出m副进行展览--》直接就是组合型枚举枚举每个位置放哪个--》再看他想要使l最小--》那在dfs枚举中加一个变量sum表示他不就完了那就开干#includeiostream #includecstring #includealgorithm using namespace std; const int N100010; int n,m; int a[N]; bool st[N]; int b[N]; long long res1e18; void dfs(int x,int last,long long sum) { if(xm) { resmin(res,sum); return; } if(xm)return; for(int i0;in;i) { if(!st[i]) { st[i]true; dfs(x1,i,sumabs(a[i]*a[i]-a[last]*a[last])); st[i]false; } } } int main() { cinnm; for(int i0;in;i) { cina[i]; } for(int i0;in;i) { st[i]true; dfs(1,i,0); st[i]false; } coutresendl; return 0; }再仔细分析一下这个题目--》求的是的最小值那么肯定是相差越远这个值就越大所以最小值肯定出现在一个连续的区间中而且区间的大小为m--》所以我们考虑先排个序然后在计算--》那么因为计算的是一段区间的平方差的和--》自然而然想到前缀和去优化--》滑动大小为m的窗口找到最小值#includeiostream #includecstring #includealgorithm using namespace std; typedef long long ll; const int N100010; int n,m; int a[N]; ll pre[N]; long long sum1e18; int main() { cinnm; for(int i1;in;i) { cina[i]; } sort(a1,an1); for(int i2;in;i)//注意从2开始 { pre[i]pre[i-1]abs(a[i]*a[i]-a[i-1]*a[i-1]); } for(int i1;im-1n;i) { summin(sum,pre[im-1]-pre[i]);//注意使pre[i]不是pre[i-1] } coutsumendl; return 0; }第六题动态规划--》但是实在想不出来怎么写讨厌的动态规划暴力也没写出来把一列看成一种状态暂时学不会第八题0装修报价 - 蓝桥云课这个题目仔细一看其实就是枚举这三个符号的全排列然后加上运算符--》其实就是dfs枚举表达式求值用栈解决--》但是这样暴力只能拿一半的分嘻嘻已经很好了#includeiostream #includealgorithm #includecstring #includestack using namespace std; const int N100010,mod1e97; typedef long long ll; int n; int a[N]; int s[N]; ll ans0; void dfs(int u) { if(un) { stackint stk,stk2; stk.push(a[1]); for(int i1;iu;i) { if(s[i]1||s[i]2) { stk.push(a[i1]); stk2.push(s[i]); } else { int t1stk.top(); stk.pop(); stk.push(t1^a[i1]); } } while(!stk2.empty()) { int tstk2.top(); stk2.pop(); int t1stk.top();stk.pop(); int t2stk.top();stk.pop(); if(t1)stk.push(t1t2); else stk.push(t2-t1); } ans(ansstk.top())%mod; return; } s[u]1; dfs(u1); s[u]2; dfs(u1); s[u]3; dfs(u1); } int main() { cinn; for(int i1;in;i)cina[i]; dfs(1); coutansendl; return 0; }
2025蓝桥杯B组初赛--备战蓝桥杯版h
第一题0移动距离 - 蓝桥云课其实是一道数学题#include stdio.h #include math.h // 包含 sqrt()、arctan2() 函数 int main() { // 目标点坐标 int target_x 233; int target_y 666; // 1. 计算水平移动距离即目标点到原点的半径 r double r sqrt(target_x * target_x target_y * target_y); // 2. 计算圆心角 θ弧度制arctan2(y, x) 直接返回正确角度 double theta atan2(target_y, target_x); // 范围 (-π, π]此处为正角 // 3. 计算圆周最短弧长r * θθ已为最短夹角 double arc_length r * theta; // 4. 计算总移动距离水平距离 弧长 double total_distance r arc_length; // 输出结果保留2位小数提高可读性 int a(int)total_distance; printf(%d\n,a); return 0; }第三题0可分解的正整数 - 蓝桥云课找规律我们可以发现除了1其余都可以用三个及以上连续的整数表示因为有正有负可以抵消啊但是只有1没法用三个连续的整数表示#includeiostream using namespace std; const int N100010; typedef long long ll; int n; ll a[N]; int main() { cinn; int res0; for(int i1;in;i) { cina[i]; if(a[i]!1)res; } coutresendl; return 0; }第四题这个题目很简单其实就是不断对产值按要求进行调整--》但是容易错的一点就是容易超时--》要想办法优化一下那就还是找规律--》我们发现在这三个调整公式当中如果a,b,c产值相等了那么就没必要调整了在调整也是那些--》可以提前结束我为什么做的时候发现不了哇#includeiostream #includecstring #includealgorithm using namespace std; typedef long long ll; int t; int main() { cint; while(t--) { ll a,b,c,k; cinabck; while(k--) { ll a1a,b1b,c1c; a(b1c1)/2; b(a1c1)/2; c(a1b1)/2; if(abbc)break; } couta b cendl; } return 0; }第五题0画展布置 - 蓝桥云课我一开始一看这个题目--》那不就是dfs暴力枚举吗组合型枚举于是喜提tle那么就先分析一下暴力是怎样暴力的吧我看他是在n副画中挑出m副进行展览--》直接就是组合型枚举枚举每个位置放哪个--》再看他想要使l最小--》那在dfs枚举中加一个变量sum表示他不就完了那就开干#includeiostream #includecstring #includealgorithm using namespace std; const int N100010; int n,m; int a[N]; bool st[N]; int b[N]; long long res1e18; void dfs(int x,int last,long long sum) { if(xm) { resmin(res,sum); return; } if(xm)return; for(int i0;in;i) { if(!st[i]) { st[i]true; dfs(x1,i,sumabs(a[i]*a[i]-a[last]*a[last])); st[i]false; } } } int main() { cinnm; for(int i0;in;i) { cina[i]; } for(int i0;in;i) { st[i]true; dfs(1,i,0); st[i]false; } coutresendl; return 0; }再仔细分析一下这个题目--》求的是的最小值那么肯定是相差越远这个值就越大所以最小值肯定出现在一个连续的区间中而且区间的大小为m--》所以我们考虑先排个序然后在计算--》那么因为计算的是一段区间的平方差的和--》自然而然想到前缀和去优化--》滑动大小为m的窗口找到最小值#includeiostream #includecstring #includealgorithm using namespace std; typedef long long ll; const int N100010; int n,m; int a[N]; ll pre[N]; long long sum1e18; int main() { cinnm; for(int i1;in;i) { cina[i]; } sort(a1,an1); for(int i2;in;i)//注意从2开始 { pre[i]pre[i-1]abs(a[i]*a[i]-a[i-1]*a[i-1]); } for(int i1;im-1n;i) { summin(sum,pre[im-1]-pre[i]);//注意使pre[i]不是pre[i-1] } coutsumendl; return 0; }第六题动态规划--》但是实在想不出来怎么写讨厌的动态规划暴力也没写出来把一列看成一种状态暂时学不会第八题0装修报价 - 蓝桥云课这个题目仔细一看其实就是枚举这三个符号的全排列然后加上运算符--》其实就是dfs枚举表达式求值用栈解决--》但是这样暴力只能拿一半的分嘻嘻已经很好了#includeiostream #includealgorithm #includecstring #includestack using namespace std; const int N100010,mod1e97; typedef long long ll; int n; int a[N]; int s[N]; ll ans0; void dfs(int u) { if(un) { stackint stk,stk2; stk.push(a[1]); for(int i1;iu;i) { if(s[i]1||s[i]2) { stk.push(a[i1]); stk2.push(s[i]); } else { int t1stk.top(); stk.pop(); stk.push(t1^a[i1]); } } while(!stk2.empty()) { int tstk2.top(); stk2.pop(); int t1stk.top();stk.pop(); int t2stk.top();stk.pop(); if(t1)stk.push(t1t2); else stk.push(t2-t1); } ans(ansstk.top())%mod; return; } s[u]1; dfs(u1); s[u]2; dfs(u1); s[u]3; dfs(u1); } int main() { cinn; for(int i1;in;i)cina[i]; dfs(1); coutansendl; return 0; }