CF1119G. Get Ready for the Battle

CF1119G. Get Ready for the Battle

题目描述

Solution

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

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

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

构造完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 0a10,则用a2a_2a2继续减,直到am≤0a_m\leq 0am0

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

且不可能出现如下情况:
a1−n−n−...−n−k1=0a_1-n-n-...-n-k_1=0a1nn...nk1=0
a2−k2=0(a2<(n−k1)%n)a_2-k_2=0\;\;(a_2<(n-k1)\%n)a2k2=0(a2<(nk1)%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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/315690.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 ConfigMap 挂载配置文件

使用 ConfigMap 挂载配置文件Intro有一些敏感信息比如数据库连接字符串之类的出于安全考虑&#xff0c;这些敏感信息保存在了 AzureKeyVault 中&#xff0c;最近应用上了 k8s 部署&#xff0c;所以想把 AzureKeyVault 的信息迁移到 ConfigMap&#xff0c;不再依赖 AzureKeyVaul…

CF1158D. Beautiful Array

CF1158D. Beautiful Array Solution 构造 对于所有点(xi,yi)(x_i,y_i)(xi​,yi​)选择yiy_iyi​最小的点作为起点&#xff0c;每次考虑下一步若是LLL&#xff0c;则往最右边&#xff08;与当前线段夹角最大&#xff09;的点走&#xff0c;否则往最左边的点走。 时间复杂度O…

SciSharpCube:容器中的SciSharp,.NET机器学习开箱即用

SciSharp Cube在Docker容器中快速体验SciSharp机器学习工具的最新功能。项目地址(原文链接)&#xff1a;https://github.com/SciSharp/SciSharpCube从Docker Hub运行docker run --name scisharp -it -p 8888:8888 scisharpstack/scisharpcube这条命令会拉取最新的SciSharpCube镜…

CF704B. Ant Man

CF704B. Ant Man Solution 经典dpdpdp&#xff0c;第一次见好像是在ZJOIZJOIZJOI的某题&#xff1f; 先按xxx排序 用f[i][j]f[i][j]f[i][j]表示放入前iii个数&#xff0c;有jjj个端点&#xff08;不算边界点&#xff09;的最小代价。 每次可以&#xff1a; 1.合并两段折线 2.…

.NET Core 3中的性能提升(译文)

回顾我们准备推出.NET Core 2.0的时候&#xff0c;我写了一篇博文来介绍.NET已经引入的诸多性能优化中的一部分&#xff0c;我很喜欢把它们放在一起讲述&#xff0c;也收获了很多正面反馈&#xff0c;因此我又给.NET Core 2.1&#xff0c;一个同样高度聚焦于性能的版本&#xf…

CF594D. REQ

CF594D. REQ Solution 离线询问&#xff0c;按左端点排序。 对于每个质因数都会有p−1p\frac{p-1}{p}pp−1​的贡献&#xff0c;考虑把贡献维护在当前左端点右边最早出现的ppp倍数的位置上。 每次lll增加的时候&#xff0c;把这一位变成1&#xff0c;并把这一位的质因数的贡…

程序员修神之路--高并发下为什么更喜欢进程内缓存

菜菜哥&#xff0c;告诉你一个好消息YY妹子&#xff0c;什么好消息&#xff0c;你有男票了&#xff1f;不是啦&#xff0c;我做的一个网站&#xff0c;以前经常由于访问量太大而崩溃&#xff0c;现在我加上了缓存&#xff0c;很稳定啦加的什么缓存呢&#xff1f;我用的redis&am…

CF364B. Free Market

CF364B. Free Market Solution 显然最终能取到的物品必然是按cic_ici​从小到大排序后的一段前缀。能取到的价值集合可由这段前缀做背包得到。每一轮取数的价值最多增加ddd。 因此先对所有cic_ici​做背包&#xff0c;从000开始每次贪心地选取距离不超过ddd的能被ccc表出的最…

6月数据库排行:PostgreSQL和MongoDB分数罕见下降

DB-Engines 数据库流行度排行榜 6 月更新已发布&#xff0c;排名前二十如下&#xff1a;总体排名和上个月相比基本一致&#xff0c;其中排名前三的 Oracle、MySQL 和 Microsoft SQL Server 也是分数增加最多的三个数据库&#xff0c;增加的分数分别为 13.67、4.67 和 15.57&…

CF611F. New Year and Cleaning

CF611F. New Year and Cleaning Solution 还挺巧妙的套路。 把起点整体看作一个矩阵&#xff0c;在操作时移出原来矩阵外的部分的起点都是超越边界的&#xff0c;可以直接通过超出的面积计算贡献&#xff0c;再把超出的部分删去&#xff0c;模拟即可&#xff08;第一轮模拟会…

在ASP.Net Core 中使用枚举类而不是枚举

前言&#xff1a;我相信大家在编写代码时经常会遇到各种状态值&#xff0c;而且为了避免硬编码和代码中出现魔法数&#xff0c;通常我们都会定义一个枚举&#xff0c;来表示各种状态值&#xff0c;直到我看到Java中这样使用枚举&#xff0c;我再想C# 中可不可以这样写&#xff…

CF626E. Simple Skewness

CF626E. Simple Skewness Solution 先排序。 nnn为奇数时&#xff0c;枚举中位数&#xff0c;两边贪心地选择最大的数&#xff0c;显然平均数是凸函数&#xff0c;三分即可确定最值。 当nnn为偶数时&#xff0c;必然选择最大值&#xff0c;然后转化为nnn为奇数的情况。 PS&a…

ASP.NET Core 中的错误处理

1.前言ASP.NET Core处理错误环境区分为两种&#xff1a;开发环境和非开发环境。●开发环境&#xff1a;开发人员异常页。●非开发环境&#xff1a;异常处理程序页、状态代码页。在Startup.Configure方法里面我们会看到如下代码&#xff1a;env.IsDevelopment()是判断应用程序运…

Java研学-Servlet 进阶

一 请求对象 1 HttpServletRequest HttpServletRequest 是一个接口&#xff0c;该接口的实现类对象称为请求对象&#xff0c;请求对象封装了所有的请求信息(请求行&#xff0c;请求头&#xff0c;请求体(请求参数))。   HttpServletRequest 接口包含了大量的方法。由 Tomcat…

CF626F. Bear and Fair Set

CF626F. Bear and Fair Set Solution 单走一个网络流。 先对余数0..40..40..4分别建一个点&#xff0c;从S−>0..4S->0..4S−>0..4分别连容量n/5n/5n/5的边。 对于每一个限制&#xff0c;相当于把[0,b][0,b][0,b]分成了若干个小区间&#xff0c;并且可以求得每个小…

ASP.NET Core SameSite 设置引起 Cookie 在 QQ 浏览器中不起作用

最近在发布了基于 ASP.NET Core 实现的新版登录页面之后&#xff0c;陆陆续续地接到用户反馈登录时 Antiforgery Token 总是验证失败。日志中记录的对应错误是今天在 QQ 浏览器中将内核模式设置为“总是使用 IE 内核”重现了问题&#xff0c;通过浏览器的开发者工具查看 cookie…

CF372D. Choosing Subtree is Fun

CF372D. Choosing Subtree is Fun Solution 想了一晚都不会&#xff0c;一觉醒来就悟了QwQQwQQwQ 之前一直想着如何用类似树形DPDPDP的方法求出每一个点的贡献再合并&#xff0c;然后突然发现直接枚举区间就行了。 考虑区间确定时&#xff0c;其实就是求区间内节点在原树上的…

ASP.NET Core - 基于IHttpContextAccessor实现系统级别身份标识

问题引入&#xff1a;我们知道当请求通过认证模块时&#xff0c;会给当前的HttpContext赋予当前用户身份标识&#xff0c;我们在需要授权的控制器中打上[Authorize]授权标签&#xff0c;就可以在ControllerBase的User属性获取到基于声明的权限标识(ClaimsPrincipal)。遗憾的是这…

怎样学习和阅读技术书籍?

技术的更新换代非常的迅速&#xff0c;作为一个技术人&#xff0c;需要持续不断地学习才能不被淘汰。但是学习没有速成的方法&#xff0c;只可能有一些技巧让我们事半功倍&#xff0c;本文是我对学习和读书的一点思考。学习是一件「逆人性」的事&#xff0c;如果让你选择是学习…

CF653F. Paper task

CF653F. Paper task 简要题面 给定括号序列SSS&#xff0c;求其中本质不同合法括号序列个数。(∣S∣≤5∗105|S|\leq 5*10^5∣S∣≤5∗105) Solution 感觉用了一个很麻烦的方法。 我们可以考虑枚举本质不同串的右端点&#xff0c;每次动态地在SAMSAMSAM里面加入末尾元素&am…