计算客模拟赛1、小区划分

小区划分

  • 1000ms
  • 262144K

一条街道的两侧各连续坐落着 NN 座单元楼。现在要为这些单元楼划分居民校区。

规则如下:

  1. 每个小区只能由同一侧连续的若干座单元楼组成。且两侧都恰有 KK 个小区(每个小区至少有一栋楼)。
  2. 两侧的小区划分规则应该相同,比如,若左边的房子被分成 \{1,2\},\{3\}{1,2},{3} 这两个小区,那么右边也应该如此。

这样两边合计一共有 KK 对小区。

用 a_i,b_ia?i??,b?i?? 表示左右两边每座楼的人口在同侧所有单元楼总人口中所占的百分比,定义一个小区的相对拥挤程度为其人口百分比之和(左边就是对应 a_ia?i?? 的和,右边是对应 b_ib?i?? 的和)。定义这条街道的总拥挤程度为左右两边 KK 对小区的相对拥挤程度之差的绝对值之和。

现在,请你求出可能的最大拥挤程度。

输入格式

第一行两个整数 NN 和 kk。

第二行 NN 个实数,第 ii 个数为 a_ia?i??。

第三行 NN 个实数,第 ii 个数位 b_ib?i??。

输出格式

一个实数,表示这条街道的最大相对拥挤程度,保留到小数点后六位。

数据范围与约定

对于 30\%30% 的数据:n \le 20n≤20。

对于 100\%100% 的数据:n \le 800,k \le 80,k \le nn≤800,k≤80,k≤n。

保证 \sum a_i=1, \sum b_i=1∑a?i??=1,∑b?i??=1。

样例解释

11 号楼一个小区,(2,3)(2,3) 号楼 11 个小区。

这样相对拥挤程度最大为 abs(0.1 - 0.4) + abs(0.75 + 0.15 - (0.3 + 0.3))=0.6abs(0.1−0.4)+abs(0.75+0.15−(0.3+0.3))=0.6。

样例输入

3 2
0.1 0.75 0.15
0.4 0.3 0.3

样例输出

0.600000

code

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cmath>
 4 #include<cstring>
 5
 6 using namespace std;
 7
 8 const int MAXN = 810;
 9 double f[MAXN][85];
10 double a[MAXN],b[MAXN],sum1[MAXN],sum2[MAXN];
11
12 int main() {
13     int n,m;
14     scanf("%d%d",&n,&m);
15     for (int i=1; i<=n; ++i) scanf("%lf",&a[i]),sum1[i] = sum1[i-1]+a[i];
16     for (int i=1; i<=n; ++i) scanf("%lf",&b[i]),sum2[i] = sum2[i-1]+b[i];
17
18     for (int i=1; i<=n; ++i) {
19         f[i][1] = abs(sum1[i]-sum2[i]);
20         for (int j=2; j<=m&&j<=i; ++j) {
21             for (int k=j-1; k<i; ++k) {
22                 f[i][j] = max(f[i][j],f[k][j-1]+fabs(sum1[i]-sum1[k]-sum2[i]+sum2[k]));
23             }
24         }
25     }
26     printf("%.6lf",f[n][m]);
27     return 0;
28 }
时间: 2024-10-25 05:36:19

计算客模拟赛1、小区划分的相关文章

NOIP第二次模拟赛 stage1【划分数列(seq.pas/c/cpp)

7划分数列(seq.pas/c/cpp) [题目描述] 给你一个有n个元素的数列,要求把它划分成k段,使每段元素和的最大值最小 [输入格式] 第一行两个正整数n,k 第二行为此数列ai [输出格式] 一行一个数,为题目所求答案 [样例输入] 5 2 2 1 3 4 5 [样例输出] 9 [数据规模] 30%数据 n <= 30, k <= 10 100%数据 n <= 100000, k <= n, ai <= 10^9 150%数据 n <= 100000, k &l

计蒜客模拟赛D1T2 蒜头君的树:树上节点之间最短距离和

题目链接:https://nanti.jisuanke.com/t/16446 题意: 给你一棵有n个节点的树以及每条边的长度,输出树上节点之间的最短距离和.然后进行m次操作,每次操作更改一条边的长度,分别输出每次操作后树上节点之间的最短距离和. 题解: 最短距离和 = ∑(树上每一条边被最短路经过的次数 * 这条边的长度) 一个节点到它父节点的边被经过的次数 = 该节点以及它的子孙的节点个数 * 除了该节点和它子孙之外的所有节点总个数 每一个节点以及它子孙节点的个数总和用一遍dfs保存在num

计蒜客模拟赛D1T1 蒜头君打地鼠:矩阵旋转+二维前缀和

题目链接:https://nanti.jisuanke.com/t/16445 题意: 给你一个n*n大小的01矩阵,和一个k*k大小的锤子,锤子只能斜着砸,问只砸一次最多能砸到多少个1. 题解: 将原矩阵顺时针旋转45°,二维前缀和预处理,然后枚举每一个可能砸到的正方形之和并取最大. 注:枚举的正方形的四个顶点必须是从原矩阵璇转过来的点,代码中用vis数组判断. #include <iostream> #include <stdio.h> #include <string.

后缀字符串 计蒜客模拟赛

一天蒜头君得到 nnn 个字符串 sis_isi?,每个字符串的长度都不超过 101010. 蒜头君在想,在这 nnn 个字符串中,以 sis_isi? 为后缀的字符串有多少个呢? 输入格式 第一行输入一个整数 nnn. 接下来 nnn 行,每行输入一个字符串 sis_isi?. 输出格式 输出 nnn 个整数,第 iii 个整数表示以 sis_isi? 为后缀的字符串的个数. 数据范围 对于 50%50\%50% 的数据,1≤n≤1031 \le n \le 10^31≤n≤103. 对于 1

计蒜客普及组模拟赛

今天没事闲的看到计蒜客有个普及组模拟赛,就当练了练手去打了,成绩低的可怜...400分崩成280分AK梦想化作泡影 第一题 同学的爱好 链接:https://nanti.jisuanke.com/t/17291 小学应用题难度?大概画个图就能懂,把每个部分都标上号,算出a,b,c,d,e,f的部分,进行运算就行了. 不多解释了,直接上代码 #include<iostream> #include<cstdio> #include<algorithm> #include&l

记20180121模拟赛 【迁移至洛谷博客】

昨天的模拟赛考的不行啊. 和yy同学赶到考场,已经迟到了5分钟,看见zcr同学正在认真地敲着代码,心里就很慌.看见十分钟以后老卜才到,心里有了点安慰. 拿到题目,第一题.一开始看见题目十分激动,直接忽视了题目给的方程里面的绝对值.于是非常高兴地写了一个前缀最小值的处理,然后发现不对,仔细读题,看到绝对值,差点晕过去.加一个绝对值,那意味着我们的任务是在比该数大的数里面找最小值,比它小的数里找最大值.那么第一反应就想到了当年的推销员的堆,建一个小根堆维护比他大的数,建一个大根堆维护比它小的数,然后

10.30 NFLS-NOIP模拟赛 解题报告

总结:今天去了NOIP模拟赛,其实是几道USACO的经典的题目,第一题和最后一题都有思路,第二题是我一开始写了个spfa,写了一半中途发现应该是矩阵乘法,然后没做完,然后就没有然后了!第二题的暴力都没码QAQ 现在我来写解题报告了,有点饿了QAQ.. 第一题 题目 1: 架设电话线 [Jeffrey Wang, 2007] 最近,Farmer John的奶牛们越来越不满于牛棚里一塌糊涂的电话服务,于 是,她们要求FJ把那些老旧的电话线换成性能更好的新电话线.新的电话线架设 在已有的N(2 <=

2014-9-9 NOIP模拟赛

东方幻想乡系列模拟赛Stage 1命题 Nettle审题 Barty ccy1991911 FlanS39 Wagner T2 高精除高精,从来没写过,不知道怎么写,我就用大数减小数ans次,果断超时. T4 Tarjan的板子题,好久没写,中间出现了一些小错误 ①是尽管有双向边,Tarjan函数中也不必排除双向边 ②Tarjan算法有时候不能一步完成,需要做最多n次,用循环解决 ③问题是关于这个题目的虽然输入n代表有n个点,但是下面的连边中有些点根本没出现过,所以设一个数组记录有效点. Pro

【题解】PAT团体程序设计天梯赛 - 模拟赛

由于本人愚笨,最后一题实在无力AC,于是只有前14题的题解Orz 总的来说,这次模拟赛的题目不算难,前14题基本上一眼就有思路,但是某些题写起来确实不太容易,编码复杂度有点高~ L1-1 N个数求和 设计一个分数类,重载加法运算符,注意要约分,用欧几里得算法求个最大公约数即可. 1 #include <cstdio> 2 3 long long abs(long long x) 4 { 5 return x < 0 ? -x : x; 6 } 7 8 long long gcd(long