阿里巴巴春季2023届校园招聘在线笔试研发岗3.4场
ps:题目来源nb网友口述
1.晶体的数目
题目大意:
一种多边形晶体材料时间每经过1秒,每边晶体数量会增加1个
增加的晶体尺寸规则如下
1.始终保持规则的正A边形,每条边上晶体数量相同
2.每经过一秒,晶体就会在外侧增加最少个数的“单位晶体”使得每个边上的晶体数目都增加1,并且保持正A边形的形状
问A个生长时间为B的晶体块一共有多少个“单位晶体”,给定晶体边数量和晶体生长时间。
(数据范围:1≤n≤103,3≤A≤100,0≤B≤1001\leq n \leq 10^3,3 \leq A \leq 100,0 \leq B \leq 1001≤n≤103,3≤A≤100,0≤B≤100)
思路:
对于每一个图形,起始为1,每秒增加(A−2)(A-2)(A−2)条有相交的直线晶体,一条直线晶体数量为i+1,i+1,i+1,交点数量为(A−3)(A-3)(A−3),
交点重复计算要减掉。所以每秒增加量为(A−2)∗(i+1)−(A−3)(A-2)*(i+1)-(A-3)(A−2)∗(i+1)−(A−3)。
参考程序:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
ll n, A, B;
cin >> n;
ll ans = 0;
while (n--)
{
cin >> A >> B;
ans++;
for (int i = 1; i <= B; i++)
{
ans += (A - 2) * (i + 1) - (A - 3);
}
}
cout << ans << endl;
return 0;
}
/*
2
3 4
5 3
37
2
10 11
99 88
380481
*/
等腰三角形
题目大意:
正n边形中等腰锐角三角形的数量
顶点必须在多边形的顶点上,只要有一个定点不同的就是不同的三角形
数据范围(3≤n≤1073 \leq n \leq 10^73≤n≤107)
思路:
考虑多边形中每个点能构造多少个等腰锐角三角形,每个点只能和远端(中线另一端)的两个对称点构成等腰锐角三角形。
一共有n个点,所以一般情况下的结果为(n+1)/2/2∗n(n+1)/2/2*n(n+1)/2/2∗n。考虑特殊情况,如果n是4的倍数,每个点会出现一个等腰直角三角形的情况。
所以当nnn为444的倍数时,答案要减去nnn。如果nnn是333的倍数,会出现等边三角形的情况,导致重复计算。每个顶点会存在一个等边三角形,
所以被计算的等边三角形数量为nnn个,实际其中只应计算n/3n/3n/3个等边三角形。所以当nnn是333的倍数时,答案要减去2∗(n/3)2*(n/3)2∗(n/3)。
参考程序:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
ll n;
cin >> n;
ll ans = ((n + 1) / 2) / 2 * n;
if (n % 4 == 0)
{
ans -= n;
}
if (n % 3 == 0)
{
ans -= 2 * (n / 3);
}
cout << ans << endl;
return 0;
}
/*
3
1
4
0
5
5
*/
小红的扫雷游戏
题目大意:
ps:扫雷游戏,翻开的部分数字表示边上八个位置有多少个雷。
给定一个4*4的地图矩阵,有一些位置已经被翻开,想知道根据已有的信息哪些确定是雷哪些不一定是雷。
思路:
BFS待补
参考代码
.121
....
....
....
o121
oxox
....
...
....
..8.
....
....
.XXX
.X8X
.XXX
....