D. Equalize the Remainders 解析(思維)
Codeforce 999 D. Equalize the Remainders 解析(思維)
今天我們來看看CF999D
題目連結
題目
略,請直接看原題
前言
感覺要搞個類似\(stack\)的東西來儲存下一個沒滿的\(\mod m\)是哪一個才能避免\(O(m^2)\)的複雜度,沒想到反過來想,儲存前一個滿出來的是什麼就可以了。

想法
首先可能會想到,先把每個\(mod\)值都儲存到一個\(vector<int> as[\_n]\)裡,然後從\(mod=0\)開始一直到\(mod=m-1\),如果當前\(mod\)的數字太多,那就找最近的下一個\(mod\)還沒滿的值填補上去。然而這樣的複雜度要\(O(m^2)\)。
我一開始是想說看怎麼樣能利用類似\(stack\)的結構,去\(O(1)\)找到對於某個\(mod=i\)來說的下一個還沒滿的\(mod\)值,但是其實如果反過來想,每次如果有多出來的\(mod\)值,就先\(push\_back\)到一個\(vector\)裡,那麼繼續遍歷\(i=0\sim m-1\),當發現一個還沒滿的\(mod\)值時,\(vector\)末端的元素一定是靠當前\(i\)最近的。
然而會發現當前未滿的\(mod=i\)有可能需要後面的\(mod>i\)來填補,於是我們遍歷\(i\)時不要只到\(m-1\),而是讓\(i=0\sim 2m-1\),如此一來問題就解決了。
程式碼:
const int _n=2e5+10;
ll t,tt,n,m,mm,k,ii,a[_n],cnt;
VI as[_n],free;
main(void) {ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>n>>m;mm=m*2,k=n/m;rep(i,0,n){cin>>a[i];as[a[i]%m].pb(i);}
rep(i,0,mm){
ii=i%m;
if(SZ(as[ii])>k){
t=SZ(as[ii])-k;
rep(j,0,t)free.pb(as[ii][j]);
}
if(SZ(as[ii])<k){
t=min(SZ(free),k-SZ(as[ii]));
rep(j,SZ(free)-t,SZ(free)){
tt=a[free[j]]%m;if(tt>ii)tt-=m;
a[free[j]]+=ii-tt,cnt+=ii-tt;
}free.erase(free.end()-t,free.end());
}
}
cout<<cnt<<'\n';
rep(i,0,n)cout<<a[i]<<' '; cout<<'\n';
return 0;
}
\(free\)這個\(vector\)名稱已經存在了,需要\(\#define\ free\ [隨便一個字串]\)
標頭、模板請點Submission看
Submission
D. Equalize the Remainders 解析(思維)的更多相关文章
- A. Arena of Greed 解析(思維)
Codeforce 1425 A. Arena of Greed 解析(思維) 今天我們來看看CF1425A 題目連結 題目 略,請直接看原題. 前言 明明是難度1400的題目,但總感覺不是很好寫阿, ...
- E. Almost Regular Bracket Sequence 解析(思維)
Codeforce 1095 E. Almost Regular Bracket Sequence 解析(思維) 今天我們來看看CF1095E 題目連結 題目 給你一個括號序列,求有幾個字元改括號方向 ...
- C2. Power Transmission (Hard Edition) 解析(思維、幾何)
Codeforce 1163 C2. Power Transmission (Hard Edition) 解析(思維.幾何) 今天我們來看看CF1163C2 題目連結 題目 給一堆點,每兩個點會造成一 ...
- F. Moving Points 解析(思維、離散化、BIT、前綴和)
Codeforce 1311 F. Moving Points 解析(思維.離散化.BIT.前綴和) 今天我們來看看CF1311F 題目連結 題目 略,請直接看原題. 前言 最近寫1900的題目更容易 ...
- B. Two Arrays 解析(思維)
Codeforce 1417 B. Two Arrays 解析(思維) 今天我們來看看CF1417B 題目連結 題目 略,請直接看原題. 前言 a @copyright petjelinux 版權所有 ...
- C. k-Amazing Numbers 解析(思維)
Codeforce 1417 C. k-Amazing Numbers 解析(思維) 今天我們來看看CF1417C 題目連結 題目 略,請直接看原題. 前言 我實作好慢... @copyright p ...
- D. Road to Post Office 解析(思維)
Codeforce 702 D. Road to Post Office 解析(思維) 今天我們來看看CF702D 題目連結 題目 略,請直接看原題. 前言 原本想說會不會也是要列式子解或者二分搜,沒 ...
- C. Bank Hacking 解析(思維)
Codeforce 796 C. Bank Hacking 解析(思維) 今天我們來看看CF796C 題目連結 題目 略,請直接看原題. 前言 @copyright petjelinux 版權所有 觀 ...
- B. Kay and Snowflake 解析(思維、DFS、DP、重心)
Codeforce 685 B. Kay and Snowflake 解析(思維.DFS.DP.重心) 今天我們來看看CF685B 題目連結 題目 給你一棵樹,要求你求出每棵子樹的重心. 前言 完全不 ...
随机推荐
- 机器学习-线性规划(LP)
线性规划问题 首先引入如下的问题: 假设食物的各种营养成分.价格如下表: Food Energy(能量) Protein(蛋白质) Calcium(钙) Price Oatmeal(燕麦) 110 4 ...
- 刷题[NPUCTF2020]ezlogin
xpath注入 xpath注入这篇文章有关于xpath很详细的解答,包括原理等,详细了解请见此篇. 我个人再稍微讲一讲: 首先它的网站目录下会有一个xml文件,大概格式是这样: <?xml ve ...
- IIS目录浏览模式打开文件还是无法下载
写在前面的话 IIS已经设置目录浏览启用,且可以正常访问到文件,说明这些设置没问题,但是点击文件进行下载时,却提示无法下载,文件不存在等等,有的又可以,一顿操作后发现,原来是文件类型没有包含在MIME ...
- Centos-用户管理-useradd userdel usermod groupadd groupdel id
linux是多用户.多任务操作系统 linux角色分类 超级用户 root # 管理员.特定服务主进程 0 普通用户 $ 普通管理员.服务运行需要的用户 500~65535 虚拟用户 不能登录 ...
- Centos-重定向方式打包、备份、还原、恢复工具-cpio
cpio 通过重定向方式将文件进行打包.备份.还原.恢复工具,扩展名为 .cpio 相关选项 -o 将文件复制.打包成文件或将将文件输出到标准输出 -i 将打包文件或者将设备上的备份还原到系统中 - ...
- 【宝塔面板】centOS部署前后端分离所有遇到的坑,Django
1:刚刚买完服务器,在宝塔面板安装完一切工具,Django顺利运行后(不能运行一般是起了中文名) # 问题:想迁移数据库,结果发现-bash: python3: command not found# ...
- Java知识系统回顾整理01基础03变量01变量定义
定义: 变量:用来命名一个数据的标识符 一.什么是变量? 用具体实例定义变量 变量的定义是: 用来命名一个数据的标识符 1949 这是一个数字,代表某年 如果要命名这个数字,在java里就会写成: i ...
- Java 从现在到次日零时还剩余多少秒
参考:计算从现在到凌晨00:00还剩余多少秒 应用场景:某些应用需要在特定的时间点更新数据 1 import java.text.DateFormat; 2 import java.text.Simp ...
- win10下安装使用Docker:Docker for Windows
一.下载win10下安装docker和桌面管理的工具: 下载地址:Docker for Windows 安装软件学习地址:https://www.runoob.com/docker/docker-tu ...
- TP5隐藏入口文件
1,进入根目录,打开public文件夹,里面有个.htaccess文件 2,将这段代码改成?s= 3,不修改该文件,想要隐藏入口文件则会报错 4,改了文件之后是 5,改了入口文件为了隐藏 .php