【题解】U405180 计算平方和
欢迎大家在评论区抢前排!
目录
题目大意
共有
组数据。给定 ,请你计算 。 对于
的数据: 。
题解
首先我们看一下数据范围(见上)。首先
+ + 神奇整数类型之 + +
由于
快读
快读模板(函数
__int128 read() {
__int128 x=0,f=1;
char c=getchar();
while(c<'0'||c>'9') {
if(c=='-') {
f=-1;
c=getchar();
}
}
while(c>='0'&&c<='9') {
x=x*10+c-'0';
c=getchar();
}
return x*f;
}
快写
快写模板(函数
void print(__int128 x) {
if(x<0) {
putchar('-');
x=-x;
}
if(x>9) {
print(x/10);
}
putchar(x%10+'0');
}
解决完了数据类型的问题,我们该想想算法。怎样在 让我们一起在评论区打出 让我们来探索一下数学的奥秘!数学好闪,拜谢数学!
这几个字(怎么说说就说出这种话)!
平方和公式
首先我们知道一个基础公式(这里我就不再赘述,不会的同学可以自行去网上查找):
然后我们知道,线段的某个区域的长度是这么求的。
|_____________________________________________|
这个结论我们不难想到也可以运用到平方和公式上。我们可以下此结论:
设
更详细的推导:
好了,推完了,结论就是:
这样就可以在 我厉不厉害?
有了这些方法,我们所有的问题就迎刃而解了!最后献出
代码和标准时空
#include<bits/stdc++.h>
using namespace std;
__int128 x;
__int128 read() {
__int128 num=0,f=1;
char c=getchar();
while(c<'0'||c>'9') {
if(c=='-') {
f=-1;
}
c=getchar();
}
while(c>='0'&&c<='9') {
num=num*10+c-'0';
c=getchar();
}
return f*num;
}
void print(__int128 num) {
if(x<0) {
putchar('-');
x*=-1;
}
int ans[55]={},top=0;
do {
ans[top++]=num%10;
num/=10;
} while(num);
while(top) {
putchar(ans[--top]+'0');
}
}
int main() {
int t;
cin>>t;
while(t--) {
__int128 L=read(),R=read();
print(((R*(R+1)*(2*R+1))/6)-((L*(L+1)*(2*L+1))/6)+(L*L));
putchar('\n');
}
return 0;
}
时间 |
空间 |
代码长度 |
语言 |
---|---|---|---|
本文作者:daiyulong
本文链接:https://www.cnblogs.com/daiyulong/p/18008252/tijie-u405180
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步