Description

某日,竞赛班的学生来到了一家糖果店。
店里卖着M袋糖果,第i袋糖果里装有i颗糖,价格为i¥。
有N个学生对这些糖果产生了兴趣,于是迅速站成一排,且将他们编号为1到N。其中第i个学生带着a[i]¥。每一轮,他们按顺序买糖果(每一轮每个人只会买一袋)。由于体内的竞争之魂与超乎常人的不服输精神,当前学生买的这袋糖果一定会比上一个人多(当然,第一次可以随便买)。如果第N个人买了糖果,那么就到第1个人开始下一轮。
然而,钱和糖果都有限,总是要停下来的。可以在任意时刻停止购买糖果,但是最后一次必须是第N个人购买。
现在他们想知道,最终所有人购买糖果数之和最大可以是多少。(当然可以一袋都不买~)

Solution

首先我们枚举轮数P,那么要搞完P轮首先肯定要满足从1到n*P全部填满。
然后对于每个a[i]满足a[i]+P<=a[i],如果不满足,倒着扫一遍让它满足就好了,这样只要一个满足条件,后面的都会满足条件。
然后我们可以把每层向后一个个移动,一直移到不能移动为止,这样肯定是最优的。但是我们要考虑怎么快速的移动。
我们设一个free表示当前可以移动的总数,那么一开始free=m-n*p,那么当对第一轮的第一个人移动的话就会减小free,对于第二个人和第n个人的任意移动都会减小free。
那么我们要先确定第一个人的位置,那么首先第一个人剩下的钱数和free去min,如果剩下的钱数比free多,我们可以考虑每一层都向后移动free的大小,这里除一下就好了,如果最上面的那层移动了,就要修改free。如果剩下的钱更少,只能下面的那层移动剩下的钱数这么多。
然后对于后面的人每次,剩下的钱数和free去个min为o,然后移动o这么多,同时减小free(很明显后面的人移了之后位置固定了,然后上一个人也是确定的,与上一个人之间的空间就没用了,free就减小),free为0就停止移动。
复杂度O(m)

Code

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#define fo(i,a,b) for(i=a;i<=b;i++)
#define fod(i,a,b) for(i=a;i>=b;i--)
using namespace std;
typedef long long ll;
const int maxn=5e5+7;
ll a[maxn],b[maxn];
ll i,j,k,l,t,n,m,ans,T,p,fr,ans1;
int main(){freopen("compete.in","r",stdin);freopen("compete.out","w",stdout);for(scanf("%lld",&T);T;T--){scanf("%lld%lld",&n,&m);fo(i,1,n)scanf("%lld",&a[i]);ans=0;fo(p,1,m/n){fo(i,1,n)b[i]=a[i];fod(i,n,2)a[i-1]=min(a[i-1],a[i]-p);if(p*(p-1)/2*n+p>a[1])break;ans1=(1+n*p)*(n*p)/2;fr=m-n*p;t=a[1]-p*(p-1)/2*n-p;if(fr<t){l=t/fr;if(l>=p){l=p-1;ans1+=(l+1)*fr*n;k=(l+1)*fr;fr=0;}else {ans1+=t%fr*n+l*fr*n,k=t%fr+l*fr;if(l==p-1)fr-=t%fr;}}else ans1+=t*n,k=t,fr-=(p==1)*t;fo(i,2,n){t=a[i]-p*(p-1)/2*n-p*i-k;ans1+=min(fr,t)*(n-i+1);k+=min(fr,t);fr-=min(fr,t);if(!fr)break;}ans=max(ans,ans1);fo(i,1,n)a[i]=b[i];}printf("%lld\n",ans);}
}

【NOIP模拟】Competing Souls相关推荐

  1. NOI.AC NOIP模拟赛 第六场 游记

    NOI.AC NOIP模拟赛 第六场 游记 queen 题目大意: 在一个\(n\times n(n\le10^5)\)的棋盘上,放有\(m(m\le10^5)\)个皇后,其中每一个皇后都可以向上.下 ...

  2. 【noip模拟赛4】Matrix67的派对 暴力dfs

    [noip模拟赛4]Matrix67的派对 描述 Matrix67发现身高接近的人似乎更合得来.Matrix67举办的派对共有N(1<=N<=10)个人参加,Matrix67需要把他们安排 ...

  3. 【HHHOJ】NOIP模拟赛 捌 解题报告

    点此进入比赛 得分: \(30+30+70=130\)(弱爆了) 排名: \(Rank\ 22\) \(Rating\):\(-31\) \(T1\):[HHHOJ260]「NOIP模拟赛 捌」Dig ...

  4. 闵梓轩大佬のnoip模拟题D1 总结 2017/10/26

    背景 题目概括 T1 题面 分析 90分算法 满分算法 T2 题面 分析 部分分算法 满分算法 满分代码 T3 题面 分析 代码 总结 背景 这道题目是去年的金牌大佬闵梓轩在一年前出的一套noip模拟 ...

  5. jyzy noip模拟赛5.22-2

    不知道哪来的题 jyzy noip模拟赛5.22-2 样例输入 1 2 3 4 样例输出 0.200000000000000 数据 |a|,|b|,|c|,|d|<=1e9 很多大佬迅速想到二分 ...

  6. NOIP模拟赛csy2021/10/30

    NOIP模拟赛csy2021/10/30 比赛时间规划 赛后反思与总结 这..总的来说感觉打的很不好,根本没有状态,有一部分原因是今天来晚了,太慌,更多的还是这次题感觉很难o(╥﹏╥)o 比赛时间规划 ...

  7. NOIP模拟(10.22)T2 杆子的排列

    杆子的排列 题目背景: 10.22 NOIP模拟作业T2 分析:DP 定义状态dp[i][j][k]表示,目前枚举到第i大的数(即n - i + 1)那么显然如果这一个数放在左边,可以在左边被看到,放 ...

  8. Noip 模拟练习5

    Noip 模拟练习5 满分300,本人240.修正后300. 难度中等. 太空密码 Description 人类一直致力于探索地外文明,为此科学家们建造了一个巨大的射电望远镜 用于接收宇宙射线.一天从 ...

  9. Competing Souls

    Competing Souls⁡\operatorname{Competing\ Souls}Competing Souls 题目链接:jzoj5245jzoj\ 5245jzoj 5245 题目 某 ...

  10. NOIP模拟赛 四校联考 递推 + 分类讨论 + 树上期望

    NOIP 模拟题 题目名称兔子被子蚊子 源程序文件名rabbit.cpp quilt.cpp mosquito.cpp 输入文件名rabbit.in quilt.in mosquito.in 输出文件 ...

最新文章

  1. Spring IOC 容器源码分析 - 创建单例 bean 的过程
  2. IL入门之旅(三)——Dump对象
  3. 离线安装minikube—1.10.1
  4. java中对于异常的处理,代码简单描述
  5. 【机器视觉学习笔记】伽马变换(C++)
  6. CCNA-网络常用工具介绍篇
  7. A Way to implement Abstract Class In Flex
  8. mysql聚集索引 myisam_一句话说清聚集索引和非聚集索引以及MySQL的InnoDB和MyISAM
  9. centos下载mysql_python数据分析之路——centos下载并配置mysql与navicat的使用
  10. asp.net利用RAR实现文件压缩解压缩(转)
  11. 数据可视化大屏设计经验分享 【进阶篇】
  12. mysql select不走索引_避免写出不走索引的SQL, MySQL
  13. 深入理解Java:SimpleDateFormat安全的时间格式化 ;
  14. [转]Oracle分页之三:利用PagerView来实现无刷新GridView
  15. 基于C#的学生选课管理系统
  16. DMTF Redfish 概念介绍
  17. matlab三维热传导计算,matlab练习程序(差分法解二维热传导方程)
  18. 初遇初识初知接下来是什么_娱乐圈隐藏学霸,演技零差评,张新成凭什么不火?...
  19. 如何有效的解决文件锁定问题
  20. 插入排序:直接插入、交换插入、折半插入

热门文章

  1. 什么是工控主板?工控主板和商业主板的区别有哪些?
  2. MATLAB 关联M,fig等文件
  3. 智慧数据助力航天梦,Smartbi为中国航天事业添砖加瓦
  4. java如何实现e的次方_Java中怎样怎样算出求函数的幂次方?
  5. 插件Translation配置完有道应用ID和应用密钥后依然报无相关服务的实例
  6. 申银万国:A股估值已经较高 下半年二十大牛股
  7. Successful Lisp - Cover
  8. 一名黑客小鲜肉的“平凡之路”
  9. m3u8 ts 视频流下载插件(神器)
  10. Pro Android 4 第一章 Android 开发平台介绍