给出一个巧妙的方法
2026-05-06 18:55:54
发布于:浙江
40阅读
0回复
0点赞
这题看似有点绕,实则列举例子就可以得到一个很简单的方法。
例子:1 2 3 4 5
如果题目是这样,我们可以合并2~4,得到以后再去把1 9 5合并,得到后你会发现这就是题目得分之和!
证明
不难发现,一次合并操作相当于求区间和,通过刚刚的例子可以发现,合并后的数其实就是被合并的所有数字的和,且合并完题目只会剩下这个和,使用这个和进行合并是不会导致错误的,所以不管怎么合并,最后都可以化简为将所有题目进行合并,所以直接求和即可。
AC CODE
#include <iostream>
using namespace syh;
int main()
{
unsigned long long n, sum=0;
cin>>n;
long long a[1000005];
for(int i = 1;i<=n;i++)
{
cin>>a[i];
sum+=a[i];
}
cout<<sum;
}
后记
这个是考试时的想法,写题解时越写越觉得不对劲,所以还请大佬们指出错误/bx
请大家移步zsr大神的题解来获取更好的思路与解析
全部评论 3
- 置顶
出题人来了:窝腰衍派
本题你像这个人这样虽然写不出什么所以然来但是人家能猜到结论就是能A掉,强强。
至于赛后学习的人还是去看出题人,也就是我的题解吧,里面对于他说的“合并后的数其实就是所有被合并的数的和”我有详细证明。
2天前 来自 广东
0大佬亲自下场吗,%%%
2天前 来自 浙江
0已发
2天前 来自 广东
0我也是猜的性质,瞪了一眼就瞪出来了,但是我怎么感觉好像做过原题呢,那题也是异或然后答案是和
昨天 来自 北京
0
第二行最后三个是std,大佬敲错了
2天前 来自 山东
0防伪码
2天前 来自 浙江
0
毫无道理的方法,大家可以忽略这个题解
2天前 来自 浙江
0









有帮助,赞一个