题解:B4397 [蓝桥杯青少年组国赛 2025] 第二题
Chenxuhang_play
·
·
题解
题目传送门:https://www.luogu.com.cn/problem/B4397
题目大意
给定 s 和 8 个整数 a_i(i\in[1,8]),如图所示。
你的任务是找到一种填充红色圆圈的方案,所填数字必须为正整数,并满足以下条件:
- 三角形的三条边上的数字之和相等,且均为一个给定的值 s。
- 所有红色圆圈和白色圆圈都是不超过 12 的正整数,且每个正整数互不相同。
测试数据保证答案存在且唯一。
思路
用 x_i 来表示四个红色圆圈所代表的数。每个 x_i 的含义:x_1 表示第二行的红色圆圈,x_2 表示第四行的红色圆圈,x_3 表示第五行左侧的红圈,x_4 表示第五行右侧的圆圈。
根据题意,有如下方程组。
\begin{cases}
a_1+a_2+a_4+x_2+a_8=s\quad \text{\textcircled 1}\\
a_1+x_1+a_3+a_5+x_3=s\quad \text{\textcircled 2} \\
x_3+x_4+a_6+a_7+a_8=s\quad \text{\textcircled 3}
\end{cases}
可以发现,\text{\textcircled 1} 中除了 x_2 其余全部已知,那么可以直接求出 x_2。
其他的虽然不可以直接求,但不要漏掉了一个重要的条件。
> 所有红色圆圈和白色圆圈都是不超过 $12$ 的正整数,且每个正整数**互不相同**。
所以我们可以求出 $x_1+x_3+x_4$ 的值,只需要遍历所有的 $i$($i\in[1,12]$),判断哪些数没有出现,将这些数加起来,再减去 $x_2$,就可以得到 $x_1+x_3+x_4$ 的值。令 $x=x_1+x_3+x_4$。
$\text{\textcircled 2}+\text{\textcircled 3}$,得如下算式。
$$
a_1+a_3+a_5+a_6+a_7+a_8+x_1+x_3+x_4+x_3=2\times s \\
x_3=2\times s-(a_1+a_3+a_5+a_6+a_7+a_8+x_1+x_3+x_4) \\
x_3=2\times s-(a_1+a_3+a_5+a_6+a_7+a_8+x)
$$
至此,右侧的值全部已知,可以求 $x_3$ 的值。
由 $\text{\textcircled 2}$ 变形得 $x_1=s-a_1-a_3-a_5-x_3$,可以求 $x_1$ 的值。
同理由 $\text{\textcircled 3}$ 变形得 $x_4=s-a_6-a_7-a_8-x_3$,可以求 $x_4$ 的值。
至此,$x_1,x_2,x_3,x_4$ 的值全部已知。
按顺序输出即可。
## 代码
```cpp
#include <bits/stdc++.h>
using namespace std;
int a[9],b[13];
int main(){
int s,x1,x2,x3,x4,x=0;
cin>>s;
for(int i=1;i<=8;i++)
{
cin>>a[i];
b[a[i]]++;
}
x2=s-a[1]-a[2]-a[4]-a[8];
b[x2]++;
for(int i=1;i<=12;i++)
{
if(b[i]==0)
{
x+=i;
}
}
x3=s*2-(a[1]+a[3]+a[5]+a[6]+a[7]+a[8])-x;
x1=s-a[1]-a[3]-a[5]-x3;
x4=s-x3-a[6]-a[7]-a[8];
cout<<x1<<" "<<x2<<" "<<x3<<" "<<x4;
return 0;
}
```