~5 ccf 2021-12-2 序列查询新解
序列查询新解
- 题目描述
- 输入
- 输出
- 样例输入
- 样例输出
- 子任务
- 源代码
- 关于这题
题目描述
输入
输出
样例输入
样例1
3 10
2 5 8
样例2
9 10
1 2 3 4 5 6 7 8 9
样例3
2 10
1 3
样例输出
样例1
5
样例2
0
样例3
6
子任务
源代码
70分:
#include <iostream>
#include <math.h>
using namespace std;int main (){int n,N;cin>>n>>N;long double *f=new long double [N+1];long double *g=new long double [N+1];long double *t=new long double [N+1];long double *c=new long double [N+1];int rate=0;int temp=0;int i=0;int result=0;int h=0;int count=0;int k=0;f[0]=0;g[0]=0;c[0]=0;t[0]=0;for (i = 1; i <=n ; i++) {cin>>temp;t[i]=temp;c[i-1]=t[i]-t[i-1];}c[i-1]=N-t[i-1];rate=ceil((double )(N/(n+1)));for (int j = 0; j < N; j++) {g[j]= ceil((double )(j/rate));}for (int j = 0; j < N; j++) {if (c[h]!=count){count++;}else{h++;k++;count=1;}f[j]=abs(g[j]-k);}for (int j = 0; j <N ; j++) {result+=f[j];}cout<<result<<endl;return 0;
}
100分:
#include <iostream>
#include <cmath>
using namespace std;
#define ll long long// 求f数列某个区间的值。x表示区间的右边界开区间,y表示左边界闭区间,i表示区间内的任意元素值为i
ll getFSum(int x, int y, int i) {return (ll)(x - y) * i;
}// 计算g数列前pos项的和
ll getGSum(int pos, int r) {int st = 0;// 前pos项中完整长度为r的区间的个数int seqNum = (pos + 1) / r;// 前pos项中最后一个不完整区间的个数,为0或1int lastSeqNum = (pos + 1) % r == 0 ? 0 : 1;// 千seqNum个区间的区间和ll sum = (ll)seqNum * (seqNum - 1) / 2 * r;// 最后一个区间中的值的和ll lastSum = (ll)seqNum * lastSeqNum * ((pos + 1) % r);return sum + lastSum;
}// 计算yx区间内g-f的绝对值
ll getSum(int x, int y, int r, int i) {int f, gMin, gMax, changedIndex;ll sum = 0;f = i;gMin = y / r;gMax = (x - 1) / r;if(f >= gMax)sum += getFSum(x, y, i) - (getGSum(x - 1, r) - getGSum(y - 1, r));else if(f <= gMin)sum += (getGSum(x - 1, r) - getGSum(y - 1, r)) - getFSum(x, y, i);else {for(int k = gMin; k <= gMax; k ++)if(k >= i) {changedIndex = y + (k - gMin) * r;sum += getFSum(changedIndex, y, i) - (getGSum(changedIndex - 1, r) - getGSum(y - 1, r));sum += (getGSum(x - 1, r) - getGSum(changedIndex - 1, r)) - getFSum(x, changedIndex, i);break;}}return sum;
}int main() {int n, N, x = 0, y, r;ll sum = 0;cin >> n >> N;r = N / (n + 1);for(int i = 0; i < n; i ++) {y = x;cin >> x;if(x > y)sum += getSum(x, y, r, i);}// 最后计算xN区间sum += getSum(N, x, r, n);cout << sum;
}
关于这题
70分 其实都是int 也是70分…
100分: 还是换个思路 不再计算每个的值 再计算 |f(i)-g(i)| 而是计算 一整个区间的|f(i)-g(i)|的值
g(i)的每r个数的值是一样的(可能存在最后的几个数 ,不足r个数,这个要单独讨论)
既然是要计算整个区间的值,去绝对值,就分两种情况,f(i)>=g(i) 和 f(i)<g(i)
~5 ccf 2021-12-2 序列查询新解相关推荐
- 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 ...
- 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-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 ...
- CCF - 202112-2 - 序列查询新解
给出一个A数组,A = [0,2,5,8],n = 3,N = 10,r = 2: 在样例中可以看出在[0,2),[2,5),[5,8),[8,10)这些区间内,我们处在其中任何一个区间中时,f(i) ...
- csp202112-2:序列查询新解 题解
题目 样例 思路: 前缀和思想 观察f(x)f(x)f(x)和g(x)g(x)g(x)的序列,其实是有规律的: f(x)f(x)f(x)在每个A[i]A[i]A[i]处+1+1+1,在[A[i],A[ ...
最新文章
- Android 自定义圆形图片
- 使用Gradle整合SpringBoot+Vue.js-开发调试与打包
- USB4 来了(一)
- 数学建模传染病模型_数学建模| 时间序列模型
- Python中都全局变量和局部变量
- 经典算法研究系列:七、深入浅出遗传算法,透析GA本质【转载】
- linux大io引起cpu使用率偏高,系统负载高, 但CPU使用率和IO都非常低
- 20172330 2018-2019-1 《程序设计与数据结构》实验一报告
- 单片机双击 长按 c语言,单片机三种按键模式 单击 双击 长按
- Luzj's ZTE Win版 终于开发完成
- Windows安装宝塔后跳过绑定手机号
- 深入理解java虚拟机(4)---类加载机制
- 近年来Person Re-identification论文汇总
- 6580 8.1 mtp模式,查看手机容量大小修改
- 苹果AppStore被拒理由大全
- Spring Security之过滤器链【探案】+源码剖析
- 弹性容器----六大属性(5、项目在交叉轴上的对齐方式)
- 【Python3爬虫(二)】【urlib.request模块】【付费代理+auth认证】
- python写入mysql数据库_Python_MySQL数据库的写入与读取
- Java创建大小顶堆