蓝桥杯每日一题2023.9.30

蓝桥杯大赛历届真题 - C&C++ 大学 B 组 - 蓝桥云课 (lanqiao.cn)

题目描述

题目分析

对于此题,首先想到了dfs进行一一找寻,注意每次不要将重复的算进去,故我们每次循环可以记录一个开始的位置,下一次到这个位置时,这个数就不会被重复选择

没有运行出来的代码:

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long  ull;
const int N = 2e5 + 10;
ull ans, a[N];
void dfs(int n, ull start)
{
	if(n == 3) 
	{
		ull sum = a[0];
		for(int i = 1; i < 3; i ++)sum *= a[i];
		if(sum == 2021041820210418)ans ++;
		return;
	}
	for(ull i = start; i <= 2021041820210418; i ++)
	{
		a[n] = i;
		dfs(n + 1, i);
		a[n] = 0;
	}
}
int main()
{
	dfs(0, 1);
	cout << ans;
	return 0;
}

发现数字过大,运行时间过长,思考如何进行优化,想到这三个数都是2021041820210418的因数(这三个数乘积为2021041820210418),故我们可以先将2021041820210418的所有因数找出来,在这些因数中进行dfs

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
typedef unsigned long long ull;
ull cnt, a[N], q[N], ans;
void dfs(int dep, ull start)
{
	if(dep == 3)
	{
		ull sum = q[0];
		for(int i = 1; i < 3; i ++)sum *= q[i];
		if(sum == 2021041820210418)
		{
			ans ++;
		}
		return;
	}
	for(ull i = 0; i < cnt; i ++)
	{
		q[dep] = a[i];
		dfs(dep + 1, i);
		q[dep] = 0;
	}
}
int main()
{
	for(ull i = 1; i <= 2021041820210418 / i; i ++)
	{
		if(2021041820210418 % i)continue;
		a[cnt ++] = i;
		if(i != 2021041820210418 / i)a[cnt ++] = 2021041820210418 / i;
	}
	dfs(0, 0);
	cout << ans;
	return 0;
}

得到正解2430

当然也可以一进行纯纯暴力

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
typedef unsigned long long ull;
ull cnt, a[N], q[N], ans;
int main()
{
	for(ull i = 1; i <= 2021041820210418 / i; i ++)
	{
		if(2021041820210418 % i)continue;
		a[cnt ++] = i;
		if(i != 2021041820210418 / i)a[cnt ++] = 2021041820210418 / i;
	}
	for(int i = 0; i < cnt; i ++)
	{
		for(int j = 0; j < cnt; j ++)
		{
			for(int k = 0; k < cnt; k ++)
			{
				if(a[i] * a[j] * a[k] == 2021041820210418)ans ++;
			}
		}
	}
	cout << ans;
	return 0;
}
相关推荐
灰色小旋风2 小时前
力扣20有效的括号(C++)
c++·算法·leetcode·职场和发展
keep intensify3 小时前
最小路径和
算法·leetcode·职场和发展
includei4 小时前
【社招】面试_中科飞思_前端工程师
前端·面试·职场和发展
多打代码4 小时前
2026.03.23 最长递增子序列 & 最长连续递增序列 & 最长公共子序列
算法·leetcode·职场和发展
闻缺陷则喜何志丹4 小时前
【动态规划+前缀和+化环为链】P8810 [蓝桥杯 2022 国 C] 数组个数|普及+
c++·算法·前缀和·蓝桥杯·动态规划·洛谷·化环为链
爱敲代码的菜菜4 小时前
【面试】软件测试
面试·职场和发展
红云梦6 小时前
用大模型生成结构化面试评估报告:Prompt工程实战
ai·面试·职场和发展·prompt
羊小猪~~6 小时前
算法/力扣--数组典型题目
c语言·c++·python·算法·leetcode·职场和发展·求职招聘
x_xbx6 小时前
LeetCode:198. 打家劫舍
算法·leetcode·职场和发展