目录
个人总结
C/C++ 组真题
握手问题
小球反弹
好数
R 格式
宝石组合
数字接龙
爬山
拔河
编辑
再总结及后续服务器托管规划
个人总结
第一次参加蓝桥杯,大二,以前都在在学技术,没有系统的学过算法。所以,还是花了挺多时间去备战的,因为暑假想找实习,就想拿个奖写简历上。备战了大概一个多月,学了一些基础的算法(dfs bfs 动态规划为主),刷了快200道题吧,但还是因为缺少经验,比赛时有点茫然了,然后大概率是寄了。
C/C++ 组真题
握手问题
这道第一题相对于去年还算是比较简单,排列 + 特殊情况处理即可
(50 * 49) / 2 – (6*7) / 2 = 1204,答案应该是正确的
小球反弹
这个应该是错了哈哈,答案是 1100325199.77,但和这个值挺像的,可惜只看答案。
前两道题都是数学问题,唉,后悔没有静下心来看第二题了。
好数
这道题直接暴力模拟即可,数据量没有很大。
#include
using namespace std;
int N;
int main()
{
cin >> N;
int Count = 0; // 记录总个数
for (int i = 1; i 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
R 格式
这道题看起来挺简单的,但如果要拿满分的话,需要使用字符串模拟,我直接使用long long 了,应该能拿 50% 的分。
long long 50%代码
#include
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
宝石组合
这道题没有学过网上的那些公式算法,第一个想到的是暴击解法,时间复杂度O(N^3),但思考了一会,发现是可以用哈希表来优化的,时间复杂度可以降到 O(N^2)。不过貌似依然过不了很多数据,第二个比较麻烦的点就是如果 S 相同的情况下要按字典序排顺序。
#include
#include
#include
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 > nums[i];
unordered_map> hash;
for (long long i = 2; i = 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 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
数字接龙
这道题,打眼一看是 dfs ,觉得自己会,就开始做,没想到做到最后,不会判断路径是否交叉,有点懵逼了,就直接将得到的所有可以走完的路径按字典序排序后取了第一个,最后估计还没有直接输出 – 1的人得的分多。还是比赛经验不够,应该先好好看完题再开始写代码的。
这里就不放我的错代码了,唉,看到正确答案就在自己负责调试的 vector 里,却没有办法去除错错误的答案…
知乎正确答案:
#include
#include
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;
vector path;
vector 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 = 0 && x = 0 && y
爬山
由于上一题浪费了太多时间,这道题也没有认真看,想了一下动态规划,感觉有点复杂,凭感觉写了一下…出来后看了答案才发现是 优先级队列 + 贪心
这是知乎上的贪心答案,但这个做法对于有的测试用例也是过不了的,我感觉还是应该用动态规划哈哈。
int main()
{
priority_queue heap;
scanf("%d%d%d",&n,&P,&Q);
for(int i=1;i
拔河
这道题看都没看,唉,应该先看一下的……,起码得个暴力分
标准答案:指针 + 二分
#include
#include
#include
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 S;
for (int l = 1; l
再总结及后续规划
总结:自己算法还是太菜了(毕竟练习时长只有一个月),本次大概率可能是省二 ~ 省三了,省一的概率不大,不知道大三还有没有机会再打蓝桥杯,那时候应该要实习 /考研吧。
接下来的安排,下周六还有一场天梯赛,打完后就要继续学技术了,冲一下暑假的日常实习,到时候就开始佛系做力扣每日一题了,不再花时间集中学算法了,算法竞赛的帮助,对于找开发的工作,有帮助,但最重要的还是技术得学到手,做项目。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
服务器托管网 1.简介 Selenium Grid 允许通过将客户端发送的命令路由到远程浏览器实例来在远程计算机上执行 WebDriver 脚本。 提供一种在多台机器上并行运行测试的简单方法 允许在不同的浏览器版本上进行测试 启用跨平台测试 2.下载Selen…