CodeForces 490E Restoring Increasing Sequence(贪心)

news/2024/11/15 3:29:52/

CodeForces 490E Restoring Increasing Sequence(贪心)

CodeForces 490E

题目大意:给N个正整数,然而这些正整数中间有些数字是被‘?’遮挡住了,每个‘?’可以还原回一个数字,希望给定的这N个整数形成一个递增的序列。可以的话,给出这N个整数的序列,不行返回N0.

解题思路:每个整数都在满足条件的情况下尽量的小,写了一个非递归版本的,发现要考虑的因素太多了,wa了太多遍。后面改成了递归版本的,但是这个比较耗时。

代码:

#include <cstdio>
#include <cstring>const int MAXL = 10;
const int MAXN = 1e5 + 5;
char str[MAXN][MAXL];
int len[MAXN];int N;bool dfs (int i, int l1, int flag) {            if (l1 >= len[i]) {         if (flag)return true;return false;}if (str[i][l1] != '?') {if (!flag && str[i][l1] < str[i - 1][l1])return false;return dfs(i, l1 + 1, flag | str[i][l1] > str[i - 1][l1]);} else {if (flag) {str[i][l1] = '0';if (dfs(i, l1 + 1, flag))return true;str[i][l1] = '?';return false;}for (char k = str[i - 1][l1]; k <= '9'; k++) {str[i][l1] = k;if (dfs(i, l1 + 1, k > str[i - 1][l1]))return true;    }str[i][l1] = '?';return false;}
}bool judge(int i) {if (len[i] < len[i - 1])return false;if (len[i] > len[i - 1]) {if (str[i][0] == '?')str[i][0] = '1';for (int j = 1; j < len[i]; j++)if (str[i][j] == '?')str[i][j] = '0';return true;}if (dfs(i, 0, 0))return true;return false;
}bool handle () {if (N == 1)return true;for (int i = 1; i < N; i++) if (!judge(i))return false;return true;
}void handle_first() {int len = strlen(str[0]);for (int i = 0; i < len; i++)if (str[0][i] == '?')str[0][i] = (i == 0) ?'1' : '0';
}int main () {while (scanf ("%d", &N) != EOF) {for (int i = 0; i < N; i++) {scanf ("%s", str[i]);len[i] = strlen(str[i]);}handle_first();if (handle()) {printf ("YES\n");for (int i = 0; i < N; i++)  printf ("%s\n", str[i]);} elseprintf ("NO\n");}return 0;
}

http://www.ppmy.cn/news/192297.html

相关文章

笔记本电脑安装CentOS7

CentOS的镜像官网下载 1、下载CentOS7镜像文件(ISO文件)到自己电脑,官网下载路径: http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1708.iso 如下图 2、Ultraiso打开centos镜像,启动->写入硬盘镜像->格式化(把u盘格成fat32)->写入 …

Java 异常中 e.getMessage() 和 e.toString() e.printStackTrace()的区别

Java 异常中 e.getMessage() 和 e.toString() e.printStackTrace()的区别 一、概述 在java异常体系中&#xff0c;要打印异常信息&#xff0c;可以通过&#xff1a;e.getMessage() 、 e.toString() e.printStackTrace() 等方法打印出 一些 异常信息。已知的是这些方法都可以打印…

max3490esa_MAX490EESA+T

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 概述 MAX490EESA+T是用于RS-485与RS-422通信的低功耗收发器,每个器件中都具有一个驱动器和一个接收器。MAX483、MAX487、MAX488以及MAX489具有限摆率驱动器,可以减小EMI,并降低由不恰当的终端匹配电缆引起的反射,实现最高250k…

signature=a5d52dd3b1c2e95cc6ca952d8f8e8a05,6d53beb98227311df5d5a4ccf0177f23

http://pan.baidu.com/s/1qYziQoW 密码:ehge 挑了几个 MIPS: ad87780995fd77011f9d6c20efce591b89e4046e66165df6b7b50f4e651e6791 3201e2af37ca2888e9f2e71a03ce310ed3ffb217d6a9a01dc0cac2e5a68f9e37 14deb8ec0b3afe6c6e83d15056c967e88b82a8d182223565aa4ed4cdc94f8ab6 3…

Thinkpad E490 无法安装CentOS7.6的解决方法|安装CentOS遇到内核问题解决办法

前阵计划在Thinkpad E490笔记本电脑上安装多系统&#xff08;Windows、CentOS、Kali&#xff09;&#xff0c;用作技术研究。 系统出厂自带Windows10&#xff0c;入手后迫不及待地准备加装CentOS7系统。于是下载了CentOS7.6.1810完全版镜像&#xff08;CentOS-7-x86_64-Everyt…

thinkpadE490安装win7系统

使用老毛桃安装&#xff0c;分区的时候选择guid&#xff0c;勾选usb3驱动 在bios里面讲安全启动关闭&#xff0c;将csm打开 F10保存自动安装 https://zhidao.baidu.com/question/1900179486446582220.html 欢迎使用Markdown编辑器 你好&#xff01; 这是你第一次使用 Markdo…

使用 MCSM 面板一键搭建我的世界服务器,并内网穿透公网远程联机

文章目录 前言1.Mcsmanager安装2.创建Minecraft服务器3.本地测试联机4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射内网端口 5.远程联机测试6. 配置固定远程联机端口地址6.1 保留一个固定TCP地址6.2 配置固定TCP地址 7. 使用固定公网地址远程联机 转载自远程穿透文章&…

金融数据获取:通过Ajax跳转的网页怎么爬?以东方财富基金净值数据为例

你是否碰到过点击网站上的按钮或链接&#xff0c;网页数据进行了刷新&#xff0c;但浏览器上显示的网址却没有任何变化的情况&#xff0c;这其实就是利用Ajax跳转的网页。本期笔者将以东方财富网为例展示如何获取Ajax跳转的网页内容&#xff0c;本文主要内容如下&#xff1a; 目…