打卡信奥刷题(1774)用C++实现信奥 P8762 [蓝桥杯 2021 国 ABC] 123

P8762 [蓝桥杯 2021 国 ABC] 123

题目描述

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

1,1,2,1,2,3,1,2,3,4,…1,1,2,1,2,3,1,2,3,4, \ldots1,1,2,1,2,3,1,2,3,4,

小蓝发现, 这个数列前 111 项是整数 111 , 接下来 222 项是整数 111222 , 接下来 333 项是整数 111333 , 接下来 444 项是整数 111444 , 依次类推。

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

输入格式

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

接下来 TTT 行, 每行包含一组询问, 其中第 iii 行包含两个整数 lil_{i}lirir_{i}ri, 表示 询问数列中第 lil_{i}li 个数到第 rir_{i}ri 个数的和。

输出格式

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

输入输出样例 #1

输入 #1

3
1 1
1 3
5 8

输出 #1

1
4
8

说明/提示

对于 10%10 \%10% 的评测用例, 1≤T≤30,1≤li≤ri≤1001 \leq T \leq 30,1 \leq l_{i} \leq r_{i} \leq 1001T30,1liri100

对于 20%20 \%20% 的评测用例, 1≤T≤100,1≤li≤ri≤10001 \leq T \leq 100,1 \leq l_{i} \leq r_{i} \leq 10001T100,1liri1000

对于 40%40 \%40% 的评测用例, 1≤T≤1000,1≤li≤ri≤1061 \leq T \leq 1000,1 \leq l_{i} \leq r_{i} \leq 10^{6}1T1000,1liri106

对于 70%70 \%70% 的评测用例, 1≤T≤10000,1≤li≤ri≤1091 \leq T \leq 10000,1 \leq l_{i} \leq r_{i} \leq 10^{9}1T10000,1liri109

对于 80%80 \%80% 的评测用例, 1≤T≤1000,1≤li≤ri≤10121 \leq T \leq 1000,1 \leq l_{i} \leq r_{i} \leq 10^{12}1T1000,1liri1012

对于 90%90 \%90% 的评测用例, 1≤T≤10000,1≤li≤ri≤10121 \leq T \leq 10000,1 \leq l_{i} \leq r_{i} \leq 10^{12}1T10000,1liri1012

对于所有评测用例, 1≤T≤100000,1≤li≤ri≤10121 \leq T \leq 100000,1 \leq l_{i} \leq r_{i} \leq 10^{12}1T100000,1liri1012

蓝桥杯 2021 国赛 A 组 E 题(B 组 F 题,C 组 F 题)。

C++实现

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll s[2000005] , f[2000005] , ans , t , r , l; 
int main()
{
	for ( int i = 1; i < 2000005; i++ )
		s[i] = s[i - 1] + i , f[i] = f[i - 1] + s[i];
	cin >> t;
	while ( t-- )
	{
		cin >> r >> l;
		r--;
		ll levr = max( 0ll , (ll)( lower_bound( s , s + 2000005 , r ) - s - 1 ) ) , 
		   levl = max( 0ll , (ll)( lower_bound( s , s + 2000005 , l ) - s - 1 ) );
		ll sumr = f[levr] , suml = f[levl];
		sumr += ( r - s[levr] + 1 ) * ( r - s[levr] ) / 2 , 
		suml += ( l - s[levl] + 1 ) * ( l - s[levl] ) / 2;
		cout << suml - sumr << endl;
	}
	return 0;
}

在这里插入图片描述

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值