Codeforces Round 871 (Div. 4)G. Hits Different

2023-11-18

G. Hits Different

题意:

给一个如图所示的三角形,输入n,击倒方块n,获得分数n*n,同时方块n上面的两个方块也会落下,同时获得这两个方块的分数,一直向上走,知道方块1,如图所示为n=9的时候掉落的方块,求获得的分数。
g

思路:

先初始化每一层的第一个数,方便找到n所在的层数,这里用二分找。然后维护每一层的区间l,r。不难发现区间向上走的规律:
l = l - fl, r = r - fl + 1, fl为当前层,当然,要考虑边界情况,l = max(s[fl - 1], l - fl), r = min(s[fl] - 1, r - fl + 1). 至于求区间分数和,可以用前缀和的方法求,具体看代码。

代码:

/*************************************************************************
  > File Name: g.cpp
  > Author: Beans
  > Mail: 3112748286@qq.com 
  > Created Time: 2023/5/24 13:03:43
 ************************************************************************/
#include <iostream>
#include <algorithm>
#define int long long
#define endl '\n'

using namespace std;

const int maxn = 1e6 + 7;

int n, s[maxn], sum[maxn];
int cnt;

void init(){
    s[1] = 1;
    cnt = 1;
    for(cnt = 2; s[cnt - 1] <= maxn; cnt ++ )
        s[cnt] = s[cnt - 1] + (cnt - 1);
    cnt -- ;
    for(int i = 1; i <= maxn - 1; i ++ )
        sum[i] = sum[i - 1] + i * i;
}

void solve(){
    cin >> n;
    int fl = lower_bound(s + 1, s + cnt + 1, n + 1) - s;
    fl -- ;
    int l = n;
    int r = n;
    int ans = 1;
    while(fl >= 2){
        ans += sum[r] - sum[l - 1];
        l = max(s[fl - 1], l - fl);
        r = min(s[fl] - 1, r - fl + 1);
        fl -- ;
    }
    cout << ans << endl;
}

signed main(){
    ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
    int t = 1;
    cin >> t;
    init();
    while(t -- )
        solve();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Codeforces Round 871 (Div. 4)G. Hits Different 的相关文章

随机推荐

  • [Qt]控件

    文章摘于 爱编程的大丙 文章目录 1 按钮类型控件 1 1 按钮基类 QAbstractButton 1 1 1 标题和图标 1 1 2 按钮的 Check 属性 1 1 3 信号 1 1 4 槽函数 1 2 QPushButton 1 2
  • 蓝桥杯单片机14届省赛解析(个人)

    下面记录一下自己这届省赛比赛时的思路 不太会写作文 比较口语化 而且一些看法仅仅是我个人观点 赛后我还没有看过任何讲解或例程 可能会有很多理解不对的地方希望大家能够指出一起交流 一 硬件框图 往届省赛基本上都是考两个外设 这次一看硬件框图就
  • vue 集成高德地图

    准备工作 高德地图官网 https lbs amap com 高德地图JS API 2 0 教程 https lbs amap com api jsapi v2 summary 高德地图JS API 2 0 参考手册 https lbs a
  • python中sqlite3对数据库的增删改查

    1 python API的介绍 1 connection 数据库连接对象 连接对象 建立python客户端与数据库的网络连接 创建方法 sqlite3 connect 参数 2 cursor 游标对象 2 增删改查的流程 select语句
  • C++代码审查工具Cppcheck和TscanCode

    cppcheck简介 cppcheck 是一个静态代码检查工具 支持c c 代码 作为编译器的一种补充检查 cppcheck对源代码执行严格的逻辑检查 助力开发与测试工程师从代码层面挖掘问题 聚焦于包括逻辑错误 可疑的代码 运算错误 空指针
  • stm32通过spi连接esp8266的hspi 开发

    stm32通过spi连接esp8266的hspi 开发 刚刚做了stm32通过spi连接esp8266的开发 目前已经解决了遇到的大多数问题 基本可以交付使用了 写一篇文章留作记录 也可以给以后做这个的朋友做为参考 esp8266模块本身发
  • Nand Flash基础知识

    1 Nand Flash组织架构 Device Package 就是封装好的nand flash单元 包含了一个或者多个target 一个target包含了一个或者多个LUN 一个target的一个或者多个LUN共享一组数据信号 每个tar
  • 一个迷惑性很高的生产故障-Elasticsearch日志rotate导致节点CPU激增

    背景 Elasticsearch CPU很高的场景很常见 优化读写以及扩容即可解决问题 如果只有一个节点CPU高 那可能的情况就比较多了 节点机器异常 读写不均匀 GC过高 forcemerge 这里描述一个极具迷惑性的case 问题 收到
  • 电机专题2:直流有刷电机工作原理

    直流有刷电机的工作原理 直流有刷电机 其实就是直接最简单的方式利用安培力 给导线通电 然后在磁场中运动 在上面的电流电机物理模型中 电刷和主磁铁是固定不动的 是电机的定子 绕组线圈和换向片连接到一起 为转子 电机的工作过程 这种是直流有刷电
  • diskmark使用教程

    raid盘测速 首先说明一下软件各个参数的意义 1 9 测试次数 50MB 4000MB 测试规模 C D E F选择测试对象 ALL 测试以下所有 第一行代表你硬盘的读写速度 第二行代表你硬盘4K文件多线程读写速度 第三行代表你硬盘的连续
  • 计算机概论易错题总结:概念类

    为期末考试 冲鸭 文字类 1 在计算机运行时 把程序和数据一样存放在内存中 这是1946年由 领导的研究小组 正式提出并论证的 冯 诺依曼 2 被誉为第一位程序员的是 Augusta 3 我国自行设计研制的天河2号计算机是 巨型机 记法 天
  • JSP动态网页设计——tomcat配置、第一个动态工程

    默认设置 已完成eclipse安装 JDK安装 环境配置 下载tomcat压缩包 已上传至资源 并解压好 启动tomcat 在此文件夹下找到bin文件 在bin目录下点击startup bat 启动标志 双击弹出黑框 若出现以下图片 则已启
  • STL之Set基本用法

    单独说一下Set是因为这个工具以前很少用 因为接触不多 后来发现功能太强大了 本来很多题目用Set可以快速通过 但无奈之前都没有使用set的习惯 导致吃了不少亏 set功能非常强大 原因在于Set就是一棵二叉搜索树 我们在很多题目中经常遇到
  • 在Android下初始化Native OpenGL ES

    在上一篇文章中 介绍了在Android Native层初始化EGL及OpenGL ES的方法 其中 大量代码花费在EGL的初始化上面 非常的麻烦 在本文中 将展示利用GLSurfaceView来代替我们手动初始化EGL的过程 用GLSurf
  • 数据分析 告诉你《飞驰人生》为什么这么燃?

    数据分析 飞驰人生 为什么这么燃 2019年贺岁电影 飞驰人生 在豆瓣排名和猫眼排名中都排名第二的位置 我们这里爬取了豆瓣500条的评论数据来 分析一下 飞驰人生 为何这么燃 这里说明一下 之所以获取这么点数据 是豆瓣的 的反爬限制 非登录
  • Vue 0基础学习路线(24)—— 图解深度详述vue的路由动画效果的使用及详细案例(附详细案例代码解析过程及版本迭代过程)

    文章目录 1 路由动画效果 2 实例 2 1 example01 1 路由动画效果 路由动画 gt 利用 transition 组件 我们还可以给路由导航加上动效 App vue
  • TCP/IP协议:传输层之UDP

    一 UDP用户数据报协议 它是一个无连接的 面向数据报的协议 它不提供可靠性但传输速度比TCP要快 UDP数据报中的 UDP长度 为两个字节 所以我们要发送的UDP数据最多支持65507大约68K的数据 超过该大小的话需要自己来分割发送 使
  • JAVA如何连接redis以及Springboot整合redis详解

    1 java连接redis 1 1 java连接单机redis 首先创建一个普通的maven工程 1 引入依赖
  • 我发现了一个很好看的字体,霞鹜文楷!如何换windows和typora字体?

    1 字体 官方地址如下 下载也很简单 https github com lxgw LxgwWenKai 有1W多的stars 方式 直接打包下载 下载不来 可以联系在下面留言 然后ttf的文件 全部安装就行了 2 更换系统字体 然后换win
  • Codeforces Round 871 (Div. 4)G. Hits Different

    G Hits Different 题意 给一个如图所示的三角形 输入n 击倒方块n 获得分数n n 同时方块n上面的两个方块也会落下 同时获得这两个方块的分数 一直向上走 知道方块1 如图所示为n 9的时候掉落的方块 求获得的分数 思路 先