首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【蓝桥真题练习】蓝桥杯 2021 国赛 A 组 E 题

【蓝桥真题练习】蓝桥杯 2021 国赛 A 组 E 题

作者头像
用户11935701
发布2025-12-16 08:43:10
发布2025-12-16 08:43:10
1100
举报

题目描述

小蓝发现了一个有趣的数列, 这个数列的前几项如下:

1,1,2,1,2,3,1,2,3,4,…1,1,2,1,2,3,1,2,3,4,…

小蓝发现, 这个数列前 11 项是整数 11 , 接下来 22 项是整数 11 至 22 , 接下来 33 项是整数 11 至 33 , 接下来 44 项是整数 11 至 44 , 依次类推。

小蓝想知道, 这个数列中, 连续一段的和是多少。

输入格式

输入的第一行包含一个整数 TT, 表示询问的个数。

接下来 TT 行, 每行包含一组询问, 其中第 ii 行包含两个整数 lil**i 和 rir**i, 表示 询问数列中第 lil**i 个数到第 rir**i 个数的和。

输出格式

输出 TT 行, 每行包含一个整数表示对应询问的答案。

输入输出样例

输入 #1

代码语言:javascript
复制
3
1 1
1 3
5 8

输出 #1

代码语言:javascript
复制
1
4
8

解析

首先我们观察这个数列,我们可以把他分解成一个三角形的二维数组

代码语言:javascript
复制
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5

因此我们可以得到以下性质:

第n行的和为: (n + 1) * n / 2(高斯公式)

前n行的和为:n * (n + 1) * (n + 2) / 6

我们可以使用类似于前缀和的方法来解题,既前r个数字和减去前l个数字和。

我们该如何来求数字和呢?如果我们知道他所在的行数以及他所在的列数,那么我们就可以使用上述公式来求解,既:

代码语言:javascript
复制
前n-1行的和 再加上 1到这一列的和

现在的问题转到了如何求行和列,对于行数我们可以枚举行数来进行二分求解

代码语言:javascript
复制
int Find(int x)
{
    int l = 0, r = 100000000;
    while (l < r)
    {
        int mid = l + (r - l) / 2;
        if ((mid + 1) * mid / 2 >= x)
            r =  mid;
        else
            l = mid + 1;
    }
    return r;
}

同样的道理,我们知道了它的行数以及它一维的位置,可以得出它的列坐标

代码语言:javascript
复制
列坐标 = index - 行 * (行 + 1)/ 2

代码

代码语言:javascript
复制
#include<bits/stdc++.h>
using namespace std;
#define int long long

int l, r, t;
int indexl, indexr;
int suml, sumr;

int Find(int x)
{
    int l = 0, r = 100000000;
    while (l < r)
    {
        int mid = l + (r - l) / 2;
        if ((mid + 1) * mid / 2 >= x)
            r =  mid;
        else
            l = mid + 1;
    }
    return r;
}

int f(int x)//高斯公式
{
    return (x + 1) * x / 2;
}

int sumn(int x)
{
    return x * (x + 1) * (x + 2) / 6;
}

signed main()
{
    cin >> t;
    while (t--)
    {
        cin >> l >> r;
        indexl = l - f(Find(l) - 1);
        indexr = r - f(Find(r) - 1);

        suml = sumn(Find(l) - 1) + indexl * (indexl - 1) / 2;
        sumr = sumn(Find(r) - 1) + indexr * (indexr + 1) / 2;
        cout << sumr - suml << endl;
    }
    return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-12-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述
  • 输入格式
  • 输出格式
  • 输入输出样例
  • 解析
  • 代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档