凡科做的网站怎么打不开了,wordpress折叠目录,建网站建设,小韩网站源码目录 个人总结
C/C 组真题
握手问题
小球反弹
好数
R 格式
宝石组合
数字接龙
爬山
拔河
编辑
再总结及后续规划 个人总结
第一次参加蓝桥杯#xff0c;大二#xff0c;以前都在在学技术#xff0c;没有系统的学过算法。所以#xff0c;还是花了挺多时间去备…目录 个人总结
C/C 组真题
握手问题
小球反弹
好数
R 格式
宝石组合
数字接龙
爬山
拔河
编辑
再总结及后续规划 个人总结
第一次参加蓝桥杯大二以前都在在学技术没有系统的学过算法。所以还是花了挺多时间去备战的因为暑假想找实习就想拿个奖写简历上。备战了大概一个多月学了一些基础的算法dfs bfs 动态规划为主刷了快200道题吧但还是因为缺少经验比赛时有点茫然了然后大概率是寄了。
C/C 组真题
握手问题 这道第一题相对于去年还算是比较简单排列 特殊情况处理即可
(50 * 49) / 2 - (6*7) / 2 1204答案应该是正确的
小球反弹 这个应该是错了哈哈答案是 1100325199.77但和这个值挺像的可惜只看答案。
前两道题都是数学问题唉后悔没有静下心来看第二题了。
好数 这道题直接暴力模拟即可数据量没有很大。
#include iostream
using namespace std;
int N;
int main()
{cin N;int Count 0; // 记录总个数for (int i 1; i N; i){// 判断某一个数是否是 好数int n i; // 用 n 记录 iint flag 1; // 1 此时计算的是 i 的奇数位, 0 表示此时计算的是 i 的偶数位int ret 1; // 记录当前数否为 好数while (n 0){int end n % 10;if (flag 1){if (end % 2 0){ret 0;break;}flag 0;}else // flag 0{if (end % 2 ! 0){ret 0;break;}flag 1;}n / 10;}if (ret 1) Count;}cout Count endl;return 0;
}
R 格式 这道题看起来挺简单的但如果要拿满分的话需要使用字符串模拟我直接使用 long long 了应该能拿 50% 的分。
long long 50%代码
#include iostream
using namespace std;
double d;
int n;
long long func(int n)
{long long ret 1;while (n--){ret * 2;}return ret;
}
int main()
{cin n d;cout (long long)(func(n) * d 0.5) endl;return 0;
}
宝石组合 这道题没有学过网上的那些公式算法第一个想到的是暴击解法时间复杂度O(N^3)但思考了一会发现是可以用哈希表来优化的时间复杂度可以降到 O(N^2)。不过貌似依然过不了很多数据第二个比较麻烦的点就是如果 S 相同的情况下要按字典序排顺序。
#include iostream
#include algorithm
#include unordered_map
using namespace std;
long long N;
long long nums[100010];
long long func(long long a, long long b, long long c 1)
{long long Max max(a, max(b, c));long long i 0;for (i Max; i 0; i Max){if (i % a 0 i % b 0 i % c 0) break;}return i;
}
long long get_S(long long a, long long b, long long c)
{long long tmp a * b * c * func(a, b ,c);long long ret tmp / (func(a, b) * func(a, c) * func(b, c));return ret;
}
int main()
{cin N;for (long long i 1; i N; i) cin nums[i];unordered_maplong long, pairlong long, long long hash;for (long long i 2; i N; i){for (long long j i - 1; j 1; j--)hash[nums[i] * nums[j]] { j, i };}long long ret[3] {100010, 100010, 100010};long long S 0;for (long long i 1; i N; i){for (auto e : hash){if (e.second.first ! i e.second.second ! i){long long tmp get_S(nums[i], nums[e.second.first], nums[e.second.second]);if (tmp S){S tmp;ret[0] nums[i];ret[1] nums[e.second.first];ret[2] nums[e.second.second];}else if (tmp S){if (ret[0] nums[i]){ret[0] nums[i];ret[1] nums[e.second.first];ret[2] nums[e.second.second];}else if (nums[i] ret[0] ret[1] nums[e.second.first]){ret[0] nums[i];ret[1] nums[e.second.first];ret[2] nums[e.second.second];}else if (nums[i] ret[0] ret[1] nums[e.second.first] ret[2] nums[e.second.second]){ret[0] nums[i];ret[1] nums[e.second.first];ret[2] nums[e.second.second];}}}}}cout ret[0] ret[1] ret[2] endl;return 0;
}
数字接龙 这道题打眼一看是 dfs 觉得自己会就开始做没想到做到最后不会判断路径是否交叉有点懵逼了就直接将得到的所有可以走完的路径按字典序排序后取了第一个最后估计还没有直接输出 - 1的人得的分多。还是比赛经验不够应该先好好看完题再开始写代码的。
这里就不放我的错代码了唉看到正确答案就在自己负责调试的 vector 里却没有办法去除错错误的答案...
知乎正确答案
#include iostream
#include vector
using namespace std;
const int N 11;
int a[N][N];
int dt[8][2] { {-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1} };
int n, k;
vectorint path;
vectorint res;
bool ban[N][N][N][N];
bool vis[N][N];
void dfs(int sx, int sy)
{if (!res.empty()) return;if (sx n - 1 sy n - 1){if (path.size() n * n - 1) res path;return;}if (path.size() n * n - 1) return;for (int i 0; i 8; i){if (!res.empty()) return;int dx dt[i][0], dy dt[i][1];int x sx dx, y sy dy;if (x 0 x n y 0 y n !vis[x][y] a[x][y] (a[sx][sy] 1) % k){if (dx ! 0 dy ! 0 ban[sx dx][sy][sx][sy dy]) continue;ban[sx][sy][x][y] ban[x][y][sx][sy] true;vis[x][y] true;path.push_back(i);dfs(x, y);path.pop_back();vis[x][y] false;ban[sx][sy][x][y] ban[x][y][sx][sy] false;}}
}
int main()
{scanf(%d%d, n, k);for (int i 0; i n; i) for (int j 0; j n; j) scanf(%d, a[i][j]);vis[0][0] true;dfs(0, 0);if (!res.empty()){for (auto x : res) printf(%d, x);}else{puts(-1);}return 0;
}
爬山 由于上一题浪费了太多时间这道题也没有认真看想了一下动态规划感觉有点复杂凭感觉写了一下...出来后看了答案才发现是 优先级队列 贪心
这是知乎上的贪心答案但这个做法对于有的测试用例也是过不了的我感觉还是应该用动态规划哈哈。
int main()
{priority_queueint heap;scanf(%d%d%d,n,P,Q);for(int i1;in;i) scanf(%d,a[i]),heap.push(a[i]);while(P||Q){auto xheap.top();heap.pop();if(PQ){int yl_sqrt(x);int y2x/2;if(y2yl){Q--;heap.push(y2);}else{P--;heap.push(yl);}}else if(P){int yl_sqrt(x);P--;heap.push(yl);}else{int y2x/2;Q--;heap.push(y2);}}ll res0;while(!heap.empty()){int xheap.top();heap.pop();resx;}printf(%lld\n,res);return 0;
}
拔河 这道题看都没看唉应该先看一下的......起码得个暴力分
标准答案指针 二分
#include iostream
#include vector
#include set
using namespace std;
typedef long long ll;
const int N 1003;
int a[N];
int n;
ll s[N];
int main()
{scanf(%d, n);for (int i 1; i n; i) scanf(%d, a[i]), s[i] s[i - 1] a[i];multisetll S;for (int l 1; l n; l){for (int r l 1; r n; r){S.insert(s[r] - s[l]);}}ll res 0x3f3f3f3f;for (int r 1; r n; r){for (int l 0; l r; l){ll val s[r] - s[l];auto it S.lower_bound(val);if (it ! S.end()){ll ans abs(*it - val);res min(res, ans);}if (it ! S.begin()){it--;ll ans abs(*it - val);res min(res, ans);}}for (int r2 r 1; r2 n; r2){S.erase(S.find(s[r2] - s[r]));}}printf(%lld\n, res);return 0;
}
再总结及后续规划
总结自己算法还是太菜了毕竟练习时长只有一个月本次大概率可能是省二 ~ 省三了省一的概率不大不知道大三还有没有机会再打蓝桥杯那时候应该要实习 / 考研吧。
接下来的安排下周六还有一场天梯赛打完后就要继续学技术了冲一下暑假的日常实习到时候就开始佛系做力扣每日一题了不再花时间集中学算法了算法竞赛的帮助对于找开发的工作有帮助但最重要的还是技术得学到手做项目。