题目:

【问题背景】

古语有云:春风得意马蹄疾,一日看尽长安花。
当然在一场考试中所有人都春风得意马蹄疾是不可能的,尤其是碰到一些毒瘤出题人的时候。

【问题描述】

又到了每月一次的月考,又是 xf 老师出题。

上一次 xf 老师出的题太毒瘤了,平均分只有 40 多,同学们都非常不满意,毕竟别的科的平均分都是 80 多。

这次 xf 为了不被同学们寄刀片,想了一个办法:只公布所有考场的平均分的平均分。这样他就可以通过调整考场的分配方式,使得平均分显得高。(每个考场都可以容纳无限人)

每次考试也不是所有同学都参加的,只有学号在 [l,r] 这个区间中的同学会参加。

他想知道对于每次考试,他调整过考场后,所有考场的平均分的平均分的最大值。

当然,同学们也可能会努力学习或整日颓废使成绩发生改变。

【输入格式】

输入的第一行包含一个整数 n。

第二行包含 n 个整数,第 i 个数 vi,表示开始时每个同学的成绩。

第三行包含一个整数 q,表示有 q 次操作。

之后 q 行,每行描述一个操作,第一个数表示操作类型。

如果操作为 1 p x,表示学号为 p 的同学分数变为 x。

如果操作为 2 l r k, 表示把学号在 [l,r] 中的同学分成 k 个考场,求这 k 个考场的平均分的平均分的最大值。

【输出格式】

对于每个 2 操作输出一行,四舍五入保留正好 3 位小数。

【样例输入】

5
5 3 4 2 1
5
2 1 4 3
1 4 8
2 3 5 3
1 2 2
2 1 3 2

【样例输出】

3.833
4.333
4.000

【样例说明】

第一个操作询问学号在 [1, 4] 之间的同学分成 3 个考场的平均分的平均分的最大值,最优策略是:{1}, {2, 4}, {3},平均分是


第二个操作把学号为 4 的同学的分数变为 8。

第三个操作询问学号在 [3, 5] 之间的同学分成 3 个考场的平均分的平均分的最大值,最优策略是:{3}, {4}, {5}。

第四个操作把学号为 2 的同学分数变为 2。

第五个操作询问学号在 [1, 3] 之间的同学分成 2 个考场的平均分的平均分的最大值,最优策略是:{1}, {2 3}。

【评测用例规模与约定】

对于全部评测用列,n ≤ 200000, q ≤ 200000, 任意时刻同学的分数 vi ≤ 109,k ≤ r − l + 1。

评测时将使用 10 个评测用例测试你的程序,每个评测用例的限制如下:

题解:

首先肯定是分析,就是有一组同学这组同学有各自的成绩,然后给你几个操作,操作为1 的话是改变同学的成绩,操作为2的话就是在当前成绩(有可能已经修改过)下计算,把所有学生分为k组求所有组平均分的平均分最大值,就是每一个小组先求平均值,然后求小组的和,再求平均值,则最大的是多少,示例已经有了,5 3 4 2分3组怎么才能保证3组的平均数的和的平均数最大。

我的思路:

我是使用dfs的,全排列把所有的分法遍历一边,一个数组记录每个组的分数和,一个数组记录每个组分了几次,

例如: 一种:记录分数和:14,0,0  记录次数:4,0,0

二种:记录分数和:12,2,0  记录次数:3,1,0

三种:记录分数和:8,6,0  记录次数:2,2,0

用一个max记录遍历所有情况中的最大值(是所有小组的平均值的和的平均值),最后输出max就是一次操作为2 时候的数值了。

后面就没有什么难度了,附上代码: (记得最后处理一下保留的小数)

package _2019_10;import java.text.DecimalFormat;
import java.util.Scanner;public class Main {static int nums[];static int targetnums[];int numbers[];static double max=Integer.MIN_VALUE;public static void main(String[] args) {Scanner scanner=new Scanner(System.in);int n=scanner.nextInt();nums=new int[n+1];targetnums=new int[n+1];for (int i = 1; i <=n; i++) {nums[i]=scanner.nextInt();}int m=scanner.nextInt();String maxnums[]=new String[m];int index=0;for (int i = 0; i < m; i++) {int step=scanner.nextInt();if (step==1) {int num=scanner.nextInt();int core=scanner.nextInt();nums[num]=core;}else if (step==2) {int num1=scanner.nextInt();int num2=scanner.nextInt();int num3=scanner.nextInt();int numbers[]=new int[num3];int numbers2[]=new int[num3];dfs(num1,num2,numbers,numbers2);maxnums[index]=new DecimalFormat("0.000").format(max).toString();max=Integer.MIN_VALUE;index++;}}for (int i = 0; i < index; i++) {System.out.println(maxnums[i]);}}static void dfs(int num1,int num2,int numbers[],int numbers2[]) {if (num1>num2) {    double sumnums = 0;for (int i = 0; i < numbers.length; i++) {if (numbers2[i]!=0) {sumnums+=(double)numbers[i]/numbers2[i];}}sumnums=sumnums/numbers.length;if (sumnums>max) {max=sumnums;}else {return;}return;}for (int i = 0; i <numbers.length; i++) {numbers[i]+=nums[num1];numbers2[i]++;dfs(num1+1, num2, numbers,numbers2);numbers[i]-=nums[num1];numbers2[i]--;}}
}

结语:这样写的话数据量大的话绝对会超时,只是骗分操作吧,没有好思路只能骗分了

更新:去蓝桥云课官网那里提交竟然pass了,我还以为会超时

2019年第十届蓝桥杯JAVAB组-----试题 J: 分考场相关推荐

  1. 第十届蓝桥杯JavaB组省赛真题

    试题 A: 组队 本题总分:5 分 [问题描述] 作为篮球队教练,你需要从以下名单中选出 1 号位至 5 号位各一名球员, 组成球队的首发阵容. 每位球员担任 1 号位至 5 号位时的评分如下表所示. ...

  2. 第十届蓝桥杯JavaB组总结

    去年参加了第九届蓝桥杯C/C++B组,很捞,做了大概5道题,就好像就做对了2道结果填空题,编程题只做了一个(只通过了部分测试数据),最后拿了个省三,但是班上那些平时没有认真准备的都拿了省二 今年想好好 ...

  3. 2019年第十届蓝桥杯A组省赛

    A.平方和(5分) 答案:2658417853 试题 A: 平方和 本题总分:5 分 [问题描述] 小明对数位中含有 2.0.1.9 的数字很感兴趣,在 1 到 40 中这样的数包括 1.2.9.10 ...

  4. 2019蓝桥杯Java决赛题答案_2019第十届蓝桥杯JavaB组省赛真题详解

    目录 题解待更新 第一题:组队 题目描述 做为篮球队教练,你须要从如下名单中选出 1 号位至 5 号位各一名球员, 组成球队的首发阵容. 每位球员担任 1 号位至 5 号位时的评分以下表所示.请你计算 ...

  5. 2019年第十届蓝桥杯B组决赛

    一.平方末尾 题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可. 能够表示为某个整数的平方的数字称为"平方数" 虽然无法立即说出某个数是平方数,但经 ...

  6. 2016年第七届蓝桥杯javaB组 试题 答案 解析

    1.煤球数目 有一堆煤球,堆成三角棱锥形.具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第四层10个(排列成三角形), .... 如果一共有100层,共有多少个煤 ...

  7. 2019年第十届蓝桥杯 - 省赛 - C/C++研究生组 - G. 扫地机器人

    2019年第十届蓝桥杯 - 省赛 - C/C++研究生组 - G. 扫地机器人 Ideas 首先我们根据数学常识可以知道,当每个机器人清扫的范围差不多时,最好都是 N / K,花的时间应该是最少的. ...

  8. 2019第十届蓝桥杯A组决赛(国赛)A题(三升序列)

    2019第十届蓝桥杯A组决赛(国赛)A题(三升序列) 输入: VLPWJVVNNZSWFGHSFRBCOIJTPYNEURPIGKQGPSXUGNELGRVZAG SDLLOVGRTWEYZKKXNK ...

  9. 2019年第十届蓝桥杯[Java]

    2019年第十届蓝桥杯[Java] 特别数的和 [题目描述] 小明对数位中含有 2.0.1.9 的数字很感兴趣(不包括前导 0),在 1 到 40 中这样的数包括 1.2.9.10 至 32.39 和 ...

最新文章

  1. VSCode搭建Vue项目
  2. Android 应用审核乱象:诈骗软件冲上排行榜首
  3. 强制卸载域控制器命令
  4. 通用类别目录Global Catalog[为企业维护windows server 2008系列五]
  5. 面试(后台开发,转载)
  6. JSF实现文件下载功能
  7. 通过系统进程查找sql语句
  8. 实战:通过组策略为用户部署软件
  9. 白话Word2Vec
  10. mysql官网下载页面
  11. Equations (哈希)
  12. autojs教程:贝壳赚app脚本代码
  13. 离散傅里叶变换----解释的最透彻的|包括定义物理意义
  14. 女大学生的一天(男生勿看)
  15. linux操作系统 第11章 linux系统管理
  16. DRAM(动态随机储存器)的内部工作原理简述
  17. thinkphp创建临时表
  18. 雨听 | 解决连接蓝牙后谷歌浏览器无声音(其他应用有声音)问题
  19. java图书分析echarts_【Echarts大数据分析】终于统计出水笔们了!都颤抖把!
  20. android gilde生命周期管理,Glide原理之Activity、Fragment生命周期监听(三)

热门文章

  1. mongoDB 高级查询(一)
  2. ChatGPT插件与简要介绍(已收集70个)了解添加插件后的chatgpt能做什么
  3. 绕过CDN查找真实IP的方法总结
  4. 处理告警“ warning #69-D integer conversion resulted in truncation”的方法
  5. 使用第三方sdk时问题
  6. 多因子风险建模-协方差矩阵、投资组合风险
  7. git报错:error.GitError: manifests rev-list (‘^HEAD‘, ‘14686468c69c63f1995ab2a0a9ad90b2e1d5e01c‘, ‘--‘)
  8. mysql numeric 空值_mysql数据库不能添加NULL值,该怎么解决 - numeric
  9. Staking来袭,10亿级市场打开! | 火星总编时刻NO.31
  10. 每日一词——@FUnctionalInterface