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 題目連結 題目 給你一棵樹,要求你求出每棵子樹的重心. 前言 完全不 ...
随机推荐
- python类,魔术方法等学习&&部分ssti常见操作知识点复习加深
python类学习&&部分ssti常见操作知识点复习加深 在做ssti的模块注入的时候经常觉得自己python基础的薄弱,来学习一下,其实还是要多练习多背. 在python中所有类默认 ...
- spring:spring再总结(ioc、aop、DI等)
IOC(Inversion of Control),即"控制反转",不是一种技术而是一种思想 1.IOC的理解 Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部 ...
- spark textfile rdd 日记
批量处理模板方法, 核心处理方法为内部方法 def batchProces(sc: SparkContext, locationFlag: Int, minid: Int, maxid: Int, n ...
- jquery全选,全不选,反选
前台 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.o ...
- SpringBoot-03-JSR303数据校验和多环境切换
3.3 JSR303数据校验 先看如何使用 Springboot中可以用@Validated来校验数据,如果数据异常则统一抛出异常,方便异常中心统一处理. 这里我们写个注解让name只支持Em ...
- pycharm 配置 github
今天突然想把自己的代码上传到github上去,然后就研究了下pycharm的配置. 首先呢,你得有个github的账号,然后建立一个项目. 然后打开pycharm,选择file->Setting ...
- ElasticSearch 索引 VS MySQL 索引
前言 这段时间在维护产品的搜索功能,每次在管理台看到 elasticsearch 这么高效的查询效率我都很好奇他是如何做到的. 这甚至比在我本地使用 MySQL 通过主键的查询速度还快. 为此我搜索了 ...
- ✅Vue选择图像
下载 Vue选择图像Vue选择图像 Vue 2.用于从列表中选择图像的组件 演示 https://mazipan.github.io/vue-select-image/ 安装 #纱 纱添加vue-se ...
- SpringBoot 完整学习笔记免费分享
从0到进阶,完全系统性的学习笔记 每次我都会反复拿来观看,因为我们总会有遗漏忘记的地方,但是笔记不会. 希望大家能好好利用它,以下是笔记截图! 以上只是其中的一项部分,这份笔记可以说含金量超高,绝对会 ...
- IDEA设置maven修改settings.xml配置文件无法加载仓库
作为初学者配置maven一般网上搜索.然后你就看到各种配置文件片段,首先配置镜像,然后配置仓库.完事后再IDEA里面配置下maven的路径和配置文件路径. 这些文章属实坑爹,完全没讲一个重要的配置就是 ...