题解 CF1731B Kill Demodogs

大家好,我是 CQ-C2024 级蒟蒻 CJH。

题意

题面翻译十分清楚。

分析

一道显然的贪心题目,本人提供一种懒人做法(同时也是洛谷最短解)。

只需要不停地向右、向下取每一个数即可。

这里推荐一个网站:OEIS

这是一个数列分析网站,收录了许许多多的数列。

你只需要把前几个手算出来,接着以逗号或者空格为分隔符的形式输入进去。如果担心不是这个规律,你可以多算几个。

你可以找到这个答案的数列为:OEIS A002412

可以发现数列的通项公式即答案为 n(n+1)(4n1)6

又因为 2n109,所以答案一定是小于 21271036 的,完全可以使用 __int128 来存储!再也不需要担心溢出了!

在输出的时候取模完后直接强制转换类型为 long long 即可!单次时间复杂度 O(1)

注意事项

  • __int128 在部分语言标准中是无法使用的(会编译错误),所以使用时请选择 C++17 及以上的语言标准。
  • 在计算 4n1 时,要使用 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;
}

如有笔误,请在此博客下回复或者私信我,本人将尽快修改!

posted @   Chen_Jinhui  阅读(7)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现

一言

不逆 不耻 不憾
——舰队Collection
点击右上角即可分享
微信分享提示