CSP 序列查询新解 202112-2
用前缀和的思想,但是直接这样还是会超时。
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相关推荐
- CCF CSP 序列查询新解
CCF CSP 序列查询新解(C语言) 题目背景 上一题"序列查询"中说道: A=[A0,A1,A2,⋯,An] 是一个由 n+1 个 [0,N) 范围内整数组成的序列,满足 0= ...
- CSP CCF: 202112-2 序列查询新解 (C++)
题目链接:计算机软件能力认证考试系统 试题编号: 202112-2 试题名称: 序列查询新解 时间限制: 1.0s 内存限制: 512.0MB 题目背景 上一题"序列查询"中说道: ...
- CCF 202112-2 序列查询新解 python 满分
CCF 202112-2 序列查询新解 python 满分 题目叙述 问题描述:略 输入格式:略 输出格式:略 样例 满分证明 解题思路 01Python超时70分 02满分python思路 第一,计 ...
- CCF CSP202112-2 序列查询新解
CCF CSP202112-2 序列查询新解 题目背景 上一题"序列查询"中说道: A=[A0,A1,A2,⋯,An]A=[A_0,A_1,A_2,⋯,A_n]A=[A0,A1 ...
- csp序列查询(C语言)
csp序列查询 #include<stdio.h>int main(){int n, N, i, sum, j;int A[200];A[0] = 0;sum = 0;scanf(&quo ...
- ~5 ccf 2021-12-2 序列查询新解
序列查询新解 题目描述 输入 输出 样例输入 样例输出 子任务 源代码 关于这题 题目描述 输入 输出 样例输入 样例1 3 10 2 5 8 样例2 9 10 1 2 3 4 5 6 7 8 9 样 ...
- CCF-CSP-202112-2:序列查询新解(C++11题解)
文章目录 问题描述 解题思路 AC代码 问题描述 题目来源:CCF-CSP-202112-2:序列查询新解 解题思路 思路稍后再补. AC代码 PA了一次,是因为没开long long #includ ...
- CCF-CSP 202112-2 序列查询新解
题目:序列查询新解 思路:在f区间内划分g区间,注意g区间左端点的定值,不断移动g区间(长度都为r),当g区间末端点超出f的范围,进入下一个f循环 #include<bits/stdc++.h& ...
- 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 ...
最新文章
- FPGA设计心得(2)边沿检测的问题进一步说明(仿真中一定能得到上升沿的设计)
- opencv矩阵运算(1)
- Tensorboard on Server
- 【莫比乌斯反演】10.30破译密码
- uniapp 开发基础环境搭建和配置
- oracle在哪里输入,Oracle数据库输出输入
- spring in action 4 第6章 视图分发
- MFQPPDCS测试理论(海盗派测试分析)
- python2与python3实现读取网页刷访问量
- 鸿蒙和小米哪个值得入手,鸿蒙系统能够吸引小米的优势是什么
- 部署策略对比:蓝绿部署、金丝雀发布及其他
- UI/UE设计学习路线图(超详细)
- 2021 Java后端+大数据暑期实习大厂面经
- 为什么要使用虚拟机?
- Win10便签在哪?Win10桌面便签怎么打开和使用?
- 喵 ~ 小程序搭建记录
- 【Android】应用拍摄视频功能
- Replication(上):常见的复制模型分布式系统的挑战
- python学习--DataFrame
- Unity3D代码混淆
热门文章
- 【手写 Promise 源码】第八篇 - 完善 Promise 并通过 promise-aplus-tests 测试
- XP SP3桌面IE图标不见了,如何找回?
- jmeter测试之参数Shar256加密
- 社交未死, 谷歌天才和他的区块链微信 | 人物志
- 直播电商购物消费者满意度在线调查报告(四)
- 10个你未必知道的CSS技巧与14种cssdiv中基本滤镜介绍
- 女神问:有多喜欢她?我立马画出了女神的素描画!结果...
- matlab计算图像周长,图像处理——周长、面积计算(Matlab).doc
- 管理者应该会讲的68个超级经典小故事
- python微信聊天