acwing周赛 4306. 序列处理
题目
给定一个长度为 n 的整数序列 a1,a2,…,an。
我们可以对该序列进行修改操作,每次操作选中其中一个元素,并使其增加 1。
现在,请你计算要使得序列中的元素各不相同,至少需要进行多少次操作。
输入格式
第一行包含整数 n。
第二行包含 n 个整数 a1,a2,…,an。
输出格式
一个整数,表示所需的最少操作次数。
数据范围
前 6 个测试点满足 1≤n≤10。
所有测试点满足 1≤n≤3000,1≤ai≤n。
思路+坑点
思路: 简单地贪心
坑点:题中数据范围为1至3000 因此很容易被误导将数组开到3010 其实used数组的范围不一定是1到3000 因为原数经历修改后值可能超过3000
代码
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define PII pair<int, string> const int maxn = 1e6 + 5; const int INF = 0x3f3f3f3f; const ll M = 1099511627776; const int N = 1e5 + 5; int a[maxn]; int main() { int n;cin>>n; for(int i=0;i<n;i++){ int t;cin>>t; a[t]++; } ll ans1=0; for(int i=1;i<=maxn;i++){ int ret=a[i]-1; if(ret>=1){ a[i+1]+=ret; ans1+=ret; } } cout<<ans1<<endl; return 0; }
本文作者:kingwzun
本文链接:https://www.cnblogs.com/kingwz/p/15966084.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步