博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces Round #315 (Div. 2B) 569B Inventory 贪心
阅读量:5925 次
发布时间:2019-06-19

本文共 1351 字,大约阅读时间需要 4 分钟。

题目:

题意:给你n,然后n个数,n个数中可能重复,可能不是1到n中的数。然后你用最少的改变数,让这个序列包含1到n所有数,并输出最后的序列。

分析:贪心。

1 #include 
2 using namespace std; 3 const int M = 1e5+5; 4 5 int n; 6 int a[M]; // 给定序列 7 int mark[M]; // mark[i] 表示i在给定序列中的出现次数 8 int notap[M]; // 给的序列中没有出现的元素 9 bool firstout;10 11 void print( int x ) { // 输出格式控制 ps:在CF上测试了一下,不管这个格式也能AC12 if( firstout ) {13 printf("%d", x );14 firstout = false;15 } 16 else17 printf(" %d", x );18 }19 20 int main() {21 while( ~scanf("%d", &n ) ) {22 memset( mark, 0, sizeof(mark) );23 memset( notap, 0, sizeof(notap) );24 for( int i=1; i<=n; i++ ) {25 scanf("%d", a+i );26 mark[a[i]]++;27 }28 int cnt = 1;29 for( int i=1; i<=n; i++ )30 if( !mark[i] ) {31 notap[cnt] = i;32 cnt++;33 }34 firstout = true;35 int top = 1;36 for( int i=1; i<=n; i++ )37 if( mark[a[i]] == 1 && a[i] <= n ) // 给定序列中有这个数并且范围合法38 print( a[i] );39 else {40 print( notap[top] ); // 不然从没有的序列中弹出一个数41 top++;42 mark[a[i]]--;43 }44 printf("\n");45 }46 return 0;47 }

 

转载于:https://www.cnblogs.com/TaoTaoCome/p/4722294.html

你可能感兴趣的文章
nginx的web-server的基本使用(二)
查看>>
基于Helm和Operator的K8S应用管理
查看>>
android精美时钟界面、游戏新闻客户端、美食APP、音乐助手等源码
查看>>
浅谈Vue模板的那些事儿
查看>>
[翻译] Async/Await 使你的代码更简洁
查看>>
NPM酷库:commander,命令行参数处理框架
查看>>
ES6时代,你真的会克隆对象吗?
查看>>
使用PHPExcel读写excel
查看>>
spring security系列二:过滤器机制
查看>>
Flask-restful 用法及自定义参数错误信息
查看>>
10个Python面试常问的问题
查看>>
AI重新定义Web安全
查看>>
C语言学习入门01
查看>>
证书类型原理及转换方式
查看>>
2017-09-17 前端日报
查看>>
面向对象编程
查看>>
基于swiper的Tab选项卡
查看>>
Python3中级玩家:淘宝天猫商品搜索爬虫自动化工具(第一篇)
查看>>
简易扒一下zepto的源码
查看>>
React组件懒加载
查看>>