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

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. FPGA设计心得(2)边沿检测的问题进一步说明(仿真中一定能得到上升沿的设计)
  2. opencv矩阵运算(1)
  3. Tensorboard on Server
  4. 【莫比乌斯反演】10.30破译密码
  5. uniapp 开发基础环境搭建和配置
  6. oracle在哪里输入,Oracle数据库输出输入
  7. spring in action 4 第6章 视图分发
  8. MFQPPDCS测试理论(海盗派测试分析)
  9. python2与python3实现读取网页刷访问量
  10. 鸿蒙和小米哪个值得入手,鸿蒙系统能够吸引小米的优势是什么
  11. 部署策略对比:蓝绿部署、金丝雀发布及其他
  12. UI/UE设计学习路线图(超详细)
  13. 2021 Java后端+大数据暑期实习大厂面经
  14. 为什么要使用虚拟机?
  15. Win10便签在哪?Win10桌面便签怎么打开和使用?
  16. 喵 ~ 小程序搭建记录
  17. 【Android】应用拍摄视频功能
  18. Replication(上):常见的复制模型分布式系统的挑战
  19. python学习--DataFrame
  20. Unity3D代码混淆

热门文章

  1. 【手写 Promise 源码】第八篇 - 完善 Promise 并通过 promise-aplus-tests 测试
  2. XP SP3桌面IE图标不见了,如何找回?
  3. jmeter测试之参数Shar256加密
  4. 社交未死, 谷歌天才和他的区块链微信 | 人物志
  5. 直播电商购物消费者满意度在线调查报告(四)
  6. 10个你未必知道的CSS技巧与14种cssdiv中基本滤镜介绍
  7. 女神问:有多喜欢她?我立马画出了女神的素描画!结果...
  8. matlab计算图像周长,图像处理——周长、面积计算(Matlab).doc
  9. 管理者应该会讲的68个超级经典小故事
  10. python微信聊天