题解:B4397 [蓝桥杯青少年组国赛 2025] 第二题

· · 题解

题目传送门:https://www.luogu.com.cn/problem/B4397

题目大意

给定 s8 个整数 a_ii\in[1,8]),如图所示。

你的任务是找到一种填充红色圆圈的方案,所填数字必须为正整数,并满足以下条件:

测试数据保证答案存在且唯一。

思路

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; } ```