题解 CF1731B Kill Demodogs
大家好,我是 CQ-C2024 级蒟蒻 CJH。
题意
题面翻译十分清楚。
分析
一道显然的贪心题目,本人提供一种懒人做法(同时也是洛谷最短解)。
只需要不停地向右、向下取每一个数即可。
这里推荐一个网站:OEIS。
这是一个数列分析网站,收录了许许多多的数列。
你只需要把前几个手算出来,接着以逗号或者空格为分隔符的形式输入进去。如果担心不是这个规律,你可以多算几个。
你可以找到这个答案的数列为:OEIS A002412。
可以发现数列的通项公式即答案为
又因为 __int128
来存储!再也不需要担心溢出了!
在输出的时候取模完后直接强制转换类型为 long long
即可!单次时间复杂度
注意事项
__int128
在部分语言标准中是无法使用的(会编译错误),所以使用时请选择C++17
及以上的语言标准。- 在计算
时,要使用4ll*n-1
而不是4*n-1
,否则会默认为int
类型导致溢出。
代码
//the code is from chenjh
#include<bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
void solve(){
int n;scanf("%d",&n);
printf("%lld\n",(long long)((__int128)((__int128)n*(n+1)*(4ll*n-1)/6)%mod*2022%mod));//取模以后再强转类型!否则可能会溢出!
}
int main(){
int t;scanf("%d",&t);
while(t--) solve();
return 0;
}
如有笔误,请在此博客下回复或者私信我,本人将尽快修改!
分类:
题解
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现