CF1119G. Get Ready for the Battle

题目描述

Solution

妙妙构造题。
考虑这样一个过程:所有人一起打第一个怪,每次打nnn,最后剩下k1<nk_1<nk1​<n,就找一些加起来正好为k1k_1k1​的组打掉k1k_1k1​,剩下的n−k1n-k_1n−k1​打第二个怪,然后重复打nnn,余数k2k_2k2​找一些组正好打掉这样一个过程,直到剩下最后一个怪,打玩n−km−1n-k_{m-1}n−km−1​,再一直打nnn到非正。

若能够构造s1..ms_{1..m}s1..m​,满足可以配成k1...km−1k_1...k_{m-1}k1​...km−1​中的任意数。
即可求出答案为⌈∑ain⌉\lceil \frac{\sum a_i}{n} \rceil⌈n∑ai​​⌉。

于是我们将kkk排序,令si=ki+1−kis_i=k_{i+1}-k_{i}si​=ki+1​−ki​,sm=n−km−1s_m=n-k_{m-1}sm​=n−km−1​,可以满足任意kik_iki​为sss前缀和中的一个。

构造完sis_isi​之后,事实上只需要用a1a_1a1​依次减s[1...m]s[1...m]s[1...m],减完s[m]s[m]s[m]之后再从s[1]s[1]s[1]开始减。若减的过程中a1≤0a_1\leq 0a1​≤0,则用a2a_2a2​继续减,直到am≤0a_m\leq 0am​≤0。

事实上这样做,a1..(m−1)a_{1..(m-1)}a1..(m−1)​都会减为0,达到最优解。
原因参照下例:
a1−n−n−...−n−k1=0a_1-n-n-...-n-k_1=0a1​−n−n−...−n−k1​=0
a2−(n−k1)%n−n−n−...−n−k2=0a_2-(n-k1)\%n-n-n-...-n-k_2=0a2​−(n−k1)%n−n−n−...−n−k2​=0
a3−(n−k2)%n−n−n−...−n−k3=0a_3-(n-k2)\%n-n-n-...-n-k_3=0a3​−(n−k2)%n−n−n−...−n−k3​=0
..................
am−(n−km−1)%n−n−n−...−n≤0a_m-(n-k_{m-1})\%n-n-n-...-n\leq0am​−(n−km−1​)%n−n−n−...−n≤0
kik_iki​与(n−ki)(n-k_i)(n−ki​)配成一段连续的s[1..m]s[1..m]s[1..m]。

且不可能出现如下情况:
a1−n−n−...−n−k1=0a_1-n-n-...-n-k_1=0a1​−n−n−...−n−k1​=0
a2−k2=0(a2<(n−k1)%n)a_2-k_2=0\;\;(a_2<(n-k1)\%n)a2​−k2​=0(a2​<(n−k1)%n)
..................

因为k2=(a1+a2)%nk_2=(a_1+a_2)\%nk2​=(a1​+a2​)%n,因此k2=(k1+k2)%nk_2=(k_1+k_2)\%nk2​=(k1​+k2​)%n,则k1%n=0k_1\%n=0k1​%n=0,则k1=0k_1=0k1​=0。

因此按此过程一定是按s[1..m]s[1..m]s[1..m]连续减下去,减完s[m]s[m]s[m],从s[1]s[1]s[1]继续减下去。

Code(讲述凌乱,理解代码体验极佳)

#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <string>
#include <cstring>
#include <ctime>
#include <cassert>
#include <string.h>
//#include <unordered_set>
//#include <unordered_map>
//#include <bits/stdc++.h>#define MP(A,B) make_pair(A,B)
#define PB(A) push_back(A)
#define SIZE(A) ((int)A.size())
#define LEN(A) ((int)A.length())
#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define fi first
#define se secondusing namespace std;template<typename T>inline bool upmin(T &x,T y) { return y<x?x=y,1:0; }
template<typename T>inline bool upmax(T &x,T y) { return x<y?x=y,1:0; }typedef long long ll;
typedef unsigned long long ull;
typedef long double lod;
typedef pair<int,int> PR;
typedef vector<int> VI;const lod eps=1e-11;
const lod pi=acos(-1);
const int oo=1<<30;
const ll loo=1ll<<62;
const int MAXN=1000005;
const ll INF=1ll<<60;
/*--------------------------------------------------------------------*/
inline int read()
{int f=1,x=0; char c=getchar();while (c<'0'||c>'9') { if (c=='-') f=-1; c=getchar(); }while (c>='0'&&c<='9') { x=(x<<3)+(x<<1)+(c^48); c=getchar(); }return x*f;
}
VI Ans;
int a[MAXN],b[MAXN],s[MAXN];
int main()
{int n=read(),m=read(),sum=0; b[1]=n;for (int i=1;i<=m;i++) sum+=(a[i]=read()),b[i+1]=sum%n;sort(b+1,b+m+1);for (int i=1;i<=m;i++) s[i]=b[i]-b[i-1];for (int i=1,id=0;i<=m;i++){int t=a[i];while (t>0) Ans.PB(i),t-=s[id%m+1],id++;}printf("%d\n",(sum-1)/n+1);while (Ans.size()%m) Ans.PB(1);for (int i=1;i<=m;i++) printf("%d%c",s[i]," \n"[i%m==0]);for (int i=0;i<Ans.size();i++) printf("%d%c",Ans[i]," \n"[(i+1)%m==0]);return 0;
}

CF1119G. Get Ready for the Battle相关推荐

  1. Unity快速上手系列之2:2D物理弹球

    大家好. 以"跳一跳"为开端,微信小游戏从今年年初起以迅雷不及掩耳盗铃儿响叮当之势席卷了用户的手机.从创意小游戏,到页游遗风的挂机游戏,一时间百花齐放. 当然,前者说是创意,其实绝 ...

  2. Codeforces Global Round 2(CF1119)

    这场题目设置有点问题啊,难度:Div.2 A->Div.2 B->Div.2 D->Div.2 C->Div.2 D->Div.1 D-> Div.1 E-> ...

  3. 新视野大学英语第三版第三册全书的Word In Use翻译和部分单元的英译汉翻译

    转到博客浏览效果可能不佳(比如序号无法正常显示,可以下载文档) 链接:https://www.lanzous.com/b531026/ 密码:2qfl Word In Use Unit1 1.Most ...

  4. 新视野大学英语第三版第三册全书答案(完整版)

    全书答案(完整版): 蓝奏云:https://www.lanzous.com/b531026/ 密码:2qfl 新视野大学英语第3版第3册Word In Use 由于我们只考1.2.4.5.8五个单元 ...

  5. 基于ComblockEngine+Unity的联机版坦克大战(一)

    文章目录 阶段目标 环境搭建 流程设计 相关说明 相关代码 上述源码地址 写在前面的一段话: 之前准备用LuaServer写一个简单moba手游,后来觉得,LuaServer毕竟是前公司内部的产品,不 ...

  6. 首款 MetaFi 游戏来袭,Ultiverse 是 Ready Player One 的复制吗?

    Apr. 2022, Grace  Data Source: Footprint Analytics  2018 年, Steven Allan Spielberg 的电影<Ready Play ...

  7. Facebook vs. Google: The battle for the future of the Web

    Facebook vs. Google: The battle for the future of the Web The rivalry between the tech titans is hea ...

  8. $(function(){})、$(document).ready(function(){})....../ ready和onload的区别

    1.window.onload 当一个文档完全下载到浏览器中时,会触发 window.onload 事件. 这意味着页面上的全部元素对 javascript 而言都是可以访问的,这种情况对编写功能性的 ...

  9. jQuery中的页面载入($()、ready(fn)、onload)

    用jQuery进行页面载入时有集中方式,我们通过例子来说明一下: 第一种(通过window.onload()): <!DOCTYPE html> <html><head& ...

最新文章

  1. 1600802002
  2. Cocos2d-x3.2 重力感应
  3. Linux基础知识99问(一)
  4. 聊一聊深度学习的weight initialization
  5. TensorFlow数据统计
  6. Sql Server临时表中插入标示列
  7. 用vbs往服务器发送文件,[转] Windows 下命令行/VBS脚本,发送带附件邮件.
  8. 在两个林间做Exchange邮箱的迁移
  9. Java语言程序设计基础篇第10版第5章习题答案
  10. VMware 配置虚拟机端口映射,实现局域网络互相访问
  11. 万稞pw80线切割编程软件_Sodick 沙迪克慢走丝线切割机床,工件摆斜不校边加工步骤...
  12. Windows版navicat11破解
  13. 计算机无法安装网卡驱动,win7网卡驱动安装不了怎么修复_WIN7网卡驱动装不上如何解决...
  14. 2019春节防坑指南之抢票陷阱
  15. iOS:项目中无用类检测和无用图片检测汇总
  16. 坚果云服务器地址,如何在WPS中启用WebDAV连接到坚果云?
  17. 万能应用市场删除后台自动安装
  18. Javascript实现数字转中文大写
  19. String.split()方法介绍
  20. 手机自动拨号软件_手机自动拨号是灵异事件?我信你个鬼

热门文章

  1. 如何判断对象是不是出轨了?
  2. 踩自行车来进行人力发电,真的能驱动旋转木马吗?
  3. 厉害了!这几位小学生竟然在艺术界掀起一阵风暴,简直是灵魂画手无疑.........
  4. 机器学习资料升级版来了!!!
  5. sql两个列值以下划线拼接得到一个新的列_面试必备sql知识点——MySQL基础
  6. 电脑编程教学_2020太原数控车床电脑编程一对一实操教学不限学时
  7. php curl https 443,PHP CURL支持HTTP、HTTPS 请求亲测可用
  8. linux调用v4l2获取视频,嵌入式Linux:V4L2视频采集操作流程和接口说明
  9. C语言删掉无关变量无输出,C语言变量类型与输出控制用法实例教程
  10. python数据分析与展示 pdf课件_python数据分析与展示 课件 相关实例(示例源码)下载 - 好例子网...