B3892 [语言月赛 202311] 方程求解 题解
Source & Knowledge
2023 年 11 月语言月赛,由洛谷网校入门计划/基础计划提供。
考察字符串的运用和桶的思想。
文字题解
题目中给出了若干个一元一次方程。我们如何求解方程呢?
对于一个方程
再两边同时除以
解方程的任务并不算太困难。困难的是,我们如何从给定的算式中提取出
-
自己编写一个读入,过滤掉其中的非数字字符,只保留数字字符,还原出原始的数字。实际上如果你接触过“快速读入”这一技巧,会发现这其实是一样的步骤。
-
使用 scanf 进行字符串的格式化。具体而言,我们可以在 scanf 过程中指定读入的格式,让每一个
%d都对应到具体位置上的数字,赋值给具体的变量。也就是:scanf("%dx%d=%d",&a,&b,&c);,它就会根据x和=这两个字符进行切分,将三个数划分给变量a,b,c 。
下一个任务是,我们如何回答,在
对于语言月赛版本,试题的数据范围较小,仅仅为
- 我们令
c[i] 表示,如果存在至少一个方程的解为i ,则c[i]=1 ,否则为0 。 - 每次询问获得
L,R 后,使用一个循环扫描c[L],c[L+1],\dots,c[R] ,计算其中有多少个为1 的c[i] ,记录其为\mathrm{cnt} 。 -
详细的代码请参考视频题解。