试题A:移动距离

1、题目分析

在这里插入图片描述
分析:根据题目易知,小明只能沿x轴向右移动或以原点(0,0)为圆心以当前位置与原点距离为半径的圆周移动,记沿x轴移动的路径为Xi,沿圆周移动的路径为Li,即移动的总路程是p个Xi与q个Li。
Xi=x1+x2+……+xp
Li=l1+l2+i……+lq
ans=Xi+Li
当出现以下情况时,移动的距离最少:
在这里插入图片描述
小明先沿x轴移动r个距离,然后沿圆周移动到(233,666)

alpha=arctan(666/233)
r=sqrt(233233+666666),x1=r,l=alpha*r
ans=x1+l

2、代码

#include <iostream>
#include <cmath>
//也可以直接包头文件<bits/stdc++.h>
using namespace std;

//先走r,再沿半径为r的圆周移动l
int main() 
{
	//r
	double r = sqrt(666 * 666+233 * 233);
	//l=alpha*r
	double alpha = atan2(666, 233);
	double l = alpha * r;

	double ans = r + l;
	//cout << ans<<endl;//1576.45
	cout << round(ans);//1576,四舍五入
	return 0;
}

答案:1576
在这里插入图片描述

试题B:客流量上限

1、题目分析

在这里插入图片描述
分析:
①当i==j时
Ai*Ai <= i * i+2025
即 Ai<=sqrt(i * i+2025)
(根据以下代码找规律:)

for (int i = 1; i <= 2025; i++)
	cout << 'A' << i << "<=" << (int)sqrt(i * i + 2025) << endl;

在这里插入图片描述
由上图可知,从A1013开始每一项都有Ai<=i

当1<=i<=1013时,均有Ai<=1013,即前1013项将1~1013分配完毕

当1014<=i<=2025时,均有Ai<=i,即可得每一项固定Ai=i(例:1013<A1014<=1014,所以A1014=1014,而每一项不重复,则1014<A1015<=1015,所以A1015=1015,以此类推……)

此时,只用分析1<=i<=1013中的序列分配方案

注:该题的以下思路没有听明白(哭),可以去看原版讲解视频(b站:ACking),自行理解

当1<=i<=1012,1013<=j<=2025时
Ai * Aj=Ai * j<=i * j+2025 即Ai<=floor(i+2025/j),Ai<=i+1

故,当1<=i<=1012时,Ai<=i+1
当1013<=i<=2025时,Ai=i

当1<=i<=1012时
A1<=2 : A1=1/2
A2<=3: A2=1/3,2/3
A1~A1012中每项都有两种情况
故,共有2^1012种可能

2、代码

#include <iostream>
#include <cmath>
using namespace std;

//1<=i<=1012 ,Ai<1013; 1013<=i<=2025, Ai<=i
// Ai=i(1014<=i<=2025)

int main()
{
	/*for (int i = 1; i <= 2025; i++)
		cout << 'A' << i << "<=" << (int)sqrt(i * i + 2025) << endl;*/
	int ans2 = 1;
	int m = 1e9 + 7;
	for (int i = 1; i <= 1012; i++)
	{
		ans2 *= 2;
		ans2 %= m;
	}
	cout << ans2;
	return 0;
}

答案:
在这里插入图片描述

试题C:可分解的正整数

1、题目分析

在这里插入图片描述
在这里插入图片描述

分析:先暴力破解查看规律,之后根据规律写代码。
设首项为a1,项数为n(n>=3),已知首项和项数可求出序列之和。

#include <iostream>
using namespace std;

bool check(int x)
{
	//暴力
	//测试所有的首项a1(-x,x) 和 项数n[3,2*x+1]
	int sum = 0;
	for (int a1 = -x; a1 <= x; a1++)
	{
		for (int n = 3; n <= 2*x+1; n++)
		{
			//sum = n * a1 + n * (n - 1) / 2;
			sum = (a1 + a1 + n - 1) * n / 2;
			if (sum == x)
				return true;
		}
	}
	return false;
}
int main()
{
	//将输入的数据个数
	int N;
	cin >> N;
	
	int ans = 0;
	for (int i = 0; i < N; i++)
	{
		int x;
		cin >> x;
		if (check(x))
		{
			cout << x << ' ';
			ans++;
		}
			
	}
	cout << ans << endl;
	return 0;
}

在这里插入图片描述
如上图,可知0~100中,只有0和1不符合。事实上,除了0/1,其它正整数均可分解。

2、代码

#include <iostream>
using namespace std;
int main()
{
	//找规律,除了0/1,其余均可以找到(题目已知Ai !=0)
	int N; cin >> N;
	int ans = 0;
	for (int i = 0; i < N; i++)
	{
		int x; cin >> x;
		if (x != 1)
			ans++;
	}
	cout << ans << endl;
	return 0;
}

试题D:产值调整

1、题目分析

在这里插入图片描述
在这里插入图片描述
分析:仍然是先暴力破解,找规律,之后进行优化。

#include <iostream>
using namespace std;
int main()
{
	int T; cin >> T;
	while (T--)
	{
		int a, b, c, k; cin >> a >> b >> c >> k;
		while (k--)
		{
			int ta = (b + c) / 2;
			int tb = (a + c) / 2;
			int tc = (a + b) / 2;
			a = ta, b = tb, c = tc;
		}
		cout << a << ' ' << b << ' ' << c << endl;
	}
	return 0;
}

在这里插入图片描述
如上图,当a=b=c时,会重复,循环可以提前退出

2、代码

#include <iostream>
using namespace std;
int main()
{
	int T; cin >> T;
	while (T--)
	{
		int a, b, c, k; cin >> a >> b >> c >> k;
		while (k--)
		{
			int ta = (b + c) / 2;
			int tb = (a + c) / 2;
			int tc = (a + b) / 2;
			a = ta, b = tb, c = tc;
			//优化
			if (a == b && b == c)
				break;
		}
		cout << a << ' ' << b << ' ' << c << endl;
	}
	return 0;
}

试题E:画展布置

1、题目分析

在这里插入图片描述
在这里插入图片描述
分析:首先看到,L式子中含有绝对值符号,对Bi进行升序排序,去掉绝对值符号。
化简:
在这里插入图片描述

2、代码

#include <iostream>
#include <algorithm>
using namespace std;

#define int long long
const int N = 1e5 + 10;
int a[N];
signed main()
{
	int n, m; cin >> n >> m;
	for (int i = 1; i <= n; i++)
	{
		cin >> a[i];
	}
	//升序,去L绝对值符号
	sort(a + 1, a + n + 1);

	int ans = LLONG_MAX;
	//选m副画
	for (int i = m; i <= n; i++)
	{
		ans = min(ans, a[i] * a[i] - a[i - m + 1] * a[i - m + 1]);

	}
	cout << ans << endl;
	return 0;
}

在这里插入图片描述

试题F:水质检测

1、题目分析

在这里插入图片描述
在这里插入图片描述
分析:看了洛谷上的题解,有贪心解法和动态规划解法的(我还没学到),把题解放在这,大家可以查看:水质检测题解

2、代码

水质检测题解

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐