用前缀和的思想,但是直接这样还是会超时。

for(int i=0;i < N;i++) g[i] = g[i-1] + i/r;
#include <iostream>
#include <cmath>using namespace std;const int M = 1e5 + 10;
typedef long long ll;ll n,N;
ll A[M];ll r;
ll ans;
ll fxall,gxall;// r 是间隔的意思,也就是几倍的等差数列计算。  公差是1
ll Sum(ll num) // 这里可以直接用r
{ll n1 = num / r;ll s = (n1)*(n1-1)*1/2*r; // r在这里是倍数。 计算了前面的总合 // 把这个n的意思是第几个数,是包括0的,0是第一个数/*Sn = n*a1 + n(n-1)*d/2; 选用这个  a1 = 0; d = 1Sn = (a1 + an)/2;*/ll yu = (num % r) + 1;s += n1*yu;// 计算到现在为止的return s;
}int main()
{cin >> n >> N;for(ll i=1;i <= n;i++) cin >> A[i];A[n+1] = N;  // 补全r = N / (n + 1);// for(int i=0;i < N;i++) cout << i/r << " ";  // 这个就是 g(x)ll left,right; // 边界的记录for(ll i=1;i <= (n + 1);i++) // 开始遍历 Ai  , i - 1 的值正好是 f的值{// cout << A[i] << endl;left = A[i-1];right = A[i] - 1;if( ((left / r) == (right / r)) && left / r == i-1 ) continue;else if( (left / r) >= i-1 && (right / r) >= i-1 ) // g(x) >= f(i){fxall = (right - left + 1) * ( i - 1 ); // f(x) 的求和gxall = Sum(right) - Sum(left - 1);// g(x) 求和公式ans += (gxall - fxall);}else if( (left / r) <= i-1 && (right / r) <= i-1 ) // g(x) <=  f(i){fxall = (right - left + 1) * ( i - 1 ); // f(x) 的求和gxall = Sum(right) - Sum(left - 1);// g(x) 求和公式ans += (fxall - gxall);}else // 一边大,一边小,要找到中间的那个分界点。 前面处理了单调的,现在开始处理非单调的。 样例三给的启示{// 找到g(x)中和 i-1相同的两个下标。这个用二分法可以找。对g(x)进行二分搜索,找到下标。// 但可以直接搜到:要找到的点是 i - 1  一般g(x)的求法是 i/r ,已知r,求ill zuo = (i - 1)*r,you = zuo + r - 1;ll l_left = left,l_right = zuo - 1;  // 用abs 减就可以fxall = (l_right - l_left + 1) * ( i - 1 );gxall = Sum(l_right) - Sum(l_left - 1);ans += abs(gxall - fxall);ll r_left = you + 1,r_right = right;fxall = (r_right - r_left + 1) * ( i - 1 );gxall = Sum(r_right) - Sum(r_left - 1);ans += abs(gxall - fxall);}}cout << ans;return 0;
}

CSP 序列查询新解 202112-2相关推荐

  1. CCF CSP 序列查询新解

    CCF CSP 序列查询新解(C语言) 题目背景 上一题"序列查询"中说道: A=[A0,A1,A2,⋯,An] 是一个由 n+1 个 [0,N) 范围内整数组成的序列,满足 0= ...

  2. CSP CCF: 202112-2 序列查询新解 (C++)

    题目链接:计算机软件能力认证考试系统 试题编号: 202112-2 试题名称: 序列查询新解 时间限制: 1.0s 内存限制: 512.0MB 题目背景 上一题"序列查询"中说道: ...

  3. CCF 202112-2 序列查询新解 python 满分

    CCF 202112-2 序列查询新解 python 满分 题目叙述 问题描述:略 输入格式:略 输出格式:略 样例 满分证明 解题思路 01Python超时70分 02满分python思路 第一,计 ...

  4. CCF CSP202112-2 序列查询新解

    CCF CSP202112-2 序列查询新解 题目背景 上一题"序列查询"中说道: A=[A0,A1,A2,⋯,An]A=[A_0,A_1,A_2,⋯,A_n]A=[A0​,A1​ ...

  5. csp序列查询(C语言)

    csp序列查询 #include<stdio.h>int main(){int n, N, i, sum, j;int A[200];A[0] = 0;sum = 0;scanf(&quo ...

  6. ~5 ccf 2021-12-2 序列查询新解

    序列查询新解 题目描述 输入 输出 样例输入 样例输出 子任务 源代码 关于这题 题目描述 输入 输出 样例输入 样例1 3 10 2 5 8 样例2 9 10 1 2 3 4 5 6 7 8 9 样 ...

  7. CCF-CSP-202112-2:序列查询新解(C++11题解)

    文章目录 问题描述 解题思路 AC代码 问题描述 题目来源:CCF-CSP-202112-2:序列查询新解 解题思路 思路稍后再补. AC代码 PA了一次,是因为没开long long #includ ...

  8. CCF-CSP 202112-2 序列查询新解

    题目:序列查询新解 思路:在f区间内划分g区间,注意g区间左端点的定值,不断移动g区间(长度都为r),当g区间末端点超出f的范围,进入下一个f循环 #include<bits/stdc++.h& ...

  9. CCF CSP 202112-2 序列查询新解

    单纯地讲思路有些难懂,这里结合一个实际例子来说明: 我们假设A = {0,1,3},n = 2,N = 10,r = 10 / (2 + 1) = 3. i 0 1 2 3 4 5 6 7 8 9 f ...

最新文章

  1. 第六章练习题和知识面扩充
  2. 用ZipInputStream和ZipOutputStream实现文件及文件夹的压缩解压
  3. DHCP冲突的解决方法
  4. Python学习:函数
  5. python 运维管理架构_企业运维监控平台架构设计与实现(ganglia篇)
  6. 服务器内存条故障显示器,客户的电脑原故障是不开机,现在又变成蓝屏:变着法加钱就搞鬼...
  7. jquery中DOM加载事件,onload事件和ready事件
  8. 微信PC版应用双开,一台计算机两个微信号
  9. 联合开发网被罚50万元,站长直接关站!
  10. 我在汉语编程留言,确引来了一顿臭骂,气愤之后,贴出来让大家评,目的让更多的人知道forth
  11. 手机微博保存的图片无法在Win10电脑端查看 - 解决方案
  12. 设计32信道的多相滤波结构数字接收机
  13. Bzoj4567---背单词
  14. 中基鸿业投资理财好习惯
  15. vivo x60pro刷机鸿蒙,vivo X60 Pro:两个好消息,两个坏消息
  16. 重大危险源可视化GIS管理系统
  17. 什么是云手机?云手机的原理是什么?
  18. 藏拙的搜索引擎技术是2008年全宇宙最耀眼的搜索引擎技术吗?
  19. 七牛云平台更换到期加速域名证书
  20. POCO库学习教程(一) windows POCO库编译(64位)

热门文章

  1. Linux防火墙iptables添加白名单
  2. 每个人都在使用LSTM,主流学术圈却只想让它的发明者闭嘴
  3. 神秘代码让iPhone微信闪退的解决方法
  4. springboot+rocketmq(6):实现消息过滤
  5. PHP连锁美业收银系统源码
  6. 大厂常考机器学习面试题分享(下)
  7. Android Listview滑动时不加载数据,停下来时加载数据,让App更优
  8. 明尼苏达量表结果分析_明尼苏达满意度量表+【长式量表100题】+【稀缺资源】+【免费分享】...
  9. 基于深度学习的图像语义编辑
  10. UE4的JSON读写方式二