蓝桥杯每日一题2023.11.19

题目描述

"蓝桥杯"练习系统 (lanqiao.cn)

题目分析

首先想到的方法为dfs去寻找每一个数,但发现会有超时

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
int n, cnt, a[N];
void dfs(int dep, int sum, int start)
{
	if(dep == 4)
	{
		if(sum == 0 && cnt == 0)
		{
			for(int i = 0; i < 4; i ++)
			{
				cout << a[i] << ' ';
			}
			cnt ++;
		}
		return;
	}
	for(int i = start; i <= sqrt(sum); i ++)
	{
		a[dep] = i;
		dfs(dep + 1, sum - (i * i), i);
	} 
}
int main()
{
	cin >> n;
	dfs(0, n, 0);
	return 0;
}

使用二分

先将后两个数确定,将其后两个数的平方和以及分别对应的数字存入结构体中,再一一枚举前两个数,二分出可以匹配的后两个数,确定出答案

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
const int N = 5e6 + 10;
int n, num;
struct node
{
	int ss, c, d;
}sum[N * 2];
bool cmp(node x, node y)
{
	if(x.ss != y.ss)
	{
		return x.ss < y.ss;	
	} 
	else
	{
		if(x.c != y.c)
		{
			return x.c < y.c;
		}
		else
		{
			return x.d < y.d;
		}
	}
}
int main()
{
	cin >> n;
	for(int c = 0; c * c <= n; c ++)
	{
		for(int d = c; c * c + d * d <= n; d ++)
		{
			sum[num ++] = {c * c + d * d, c, d};
		}
	}
	sort(sum, sum + num, cmp);
	for(int a = 0; a * a <= n; a ++)
	{
		for(int b = 0; a * a + b * b <= n; b ++)
		{
			int t = n - a * a - b * b;
			int l = 0, r = num - 1;
			while(l < r)
			{
				int mid = l + r >> 1;
				if(sum[mid].ss >= t)r = mid;
				else l = mid + 1;
			}
			if(sum[l].ss == t)
			{
				cout << a << ' ' << b << ' ' << sum[l].c << ' ' << sum[l]. d;
				return 0;
			}
			
		} 
	}
	return 0;
}
相关推荐
程序员江念1 小时前
【最经典的79个】软件测试面试题(内含答案)提前备战“金九银十”
软件测试·面试·职场和发展
find1star3 小时前
LeetCode 25:K 个一组翻转链表
java·数据结构·算法·leetcode·链表·职场和发展·动态规划
童园管理札记4 小时前
CSDN 学前入门高质量指南:从零搭建编程学习体系
人工智能·经验分享·职场和发展·生活·学习方法
后台模板学习17 小时前
2026最新面试真题:到达用英语怎么说背后的逻辑与源码剖析
面试·职场和发展·php
CoderYanger18 小时前
前端基础——JavaScript(WebAPI)(下篇)
java·开发语言·前端·javascript·程序人生·面试·职场和发展
敲代码的嘎仔20 小时前
自己设计了一个兑换码算法:自增ID + Base32转码 + 按位加权签名 + 异或混淆,面试被追问细节时终于不用慌了
java·数据库·mysql·算法·微服务·面试·职场和发展
aqiu1111111 天前
【数位 DP / 记忆化搜索】蓝桥云课 - 光轨区的 AI 数 题解
c++·算法·蓝桥杯·数位dp
程序员小远1 天前
自动化测试用例编写实例详解
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
麻辣布丁1 天前
java基础篇面试模拟
面试·职场和发展