[COCI2015]ZGODAN

题目大意:
  给你一个数$n(n\leq10^1000)$,定义一个数是“美丽数”当且仅当这个数各个数位上的数奇偶性不同。
  求最接近$n$的“美丽数”,若有多个,则依次输出。

思路:
  贪心+高精度。
  首先找出$n$的第一个不符合要求的数位,从这一位开始贪心。
  后面几位要么是'8''9'交替(小于$n$的最大的“美丽数”),要么是'0''1'交替(大于$n$的最小的“美丽数”)。
  然后高精度减法减一下,比较哪个更接近即可。

 1 #include<cstdio>
 2 #include<cstring>
 3 const int LEN=1002;
 4 char s[LEN],a[LEN],b[LEN],c[LEN],d[LEN],tmp[LEN];
 5 int len;
 6 inline void treat(char s[]) {
 7     for(register int i=0;i<len;i++) {
 8         s[i]^='0';
 9     }
10 }
11 int main() {
12     gets(s);
13     len=strlen(s);
14     treat(s);
15     a[0]=b[0]=s[0];
16     for(register int i=1;i<len;i++) {
17         if((s[i-1]&1)^(s[i]&1)) {
18             a[i]=b[i]=s[i];
19         } else {
20             if(s[i]!=0) {
21                 a[i]=s[i]-1;
22                 for(register int j=i+1;j<len;j++) {
23                     a[j]=a[j-1]&1?8:9;
24                 }
25             }
26             if(s[i]!=9) {
27                 b[i]=s[i]+1;
28                 for(register int j=i+1;j<len;j++) {
29                     b[j]=b[j-1]&1?0:1;
30                 }
31             }
32             if(s[i]==0) {
33                 treat(b);
34                 puts(b);
35                 return 0;
36             }
37             if(s[i]==9) {
38                 treat(a);
39                 puts(a);
40                 return 0;
41             }
42             for(register int j=len-1;j>=i;j--) {
43                 tmp[j]=s[j];
44             }
45             for(register int j=len-1;j>=i;j--) {
46                 if((signed char)tmp[j]<0) {
47                     tmp[j]+=10;
48                     tmp[j-1]--;
49                 }
50                 c[j]+=tmp[j]-a[j];
51                 if((signed char)c[j]<0) {
52                     c[j]+=10;
53                     tmp[j-1]--;
54                 }
55             }
56             for(register int j=len-1;j>=i;j--) {
57                 tmp[j]=b[j];
58             }
59             for(register int j=len-1;j>=i;j--) {
60                 if((signed char)tmp[j]<0) {
61                     tmp[j]+=10;
62                     tmp[j-1]--;
63                 }
64                 d[j]+=tmp[j]-s[j];
65                 if((signed char)d[j]<0) {
66                     d[j]+=10;
67                     tmp[j-1]--;
68                 }
69             }
70             treat(a);
71             treat(b);
72             for(register int j=i;j<len;j++) {
73                 if(c[j]<d[j]) {
74                     puts(a);
75                     return 0;
76                 }
77                 if(c[j]>d[j]) {
78                     puts(b);
79                     return 0;
80                 }
81             }
82             printf("%s %s\n",a,b);
83             return 0;
84         }
85     }
86     return 0;
87 }

 

转载于:https://www.cnblogs.com/skylee03/p/8420960.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/255505.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV学习笔记(三)——Mat,图像的新容器

自从版本2.0&#xff0c;OpenCV采用了新的数据结构&#xff0c;用Mat类结构取代了之前用extended C写的cvMat和lplImage&#xff0c;更加好用啦&#xff0c;最大的好处就是更加方便的进行内存管理&#xff0c;对写更大的程序是很好的消息。 需要注意的几点&#xff1a;1. Mat的…

jq实现事件委托

事件委托首 页产品展示公司简介关于我们联系我们转载于:https://www.cnblogs.com/haley168/p/eventTarget.html

【python数字信号处理】——scipy库设计滤波器(IIR为例)、绘制滤波器频谱响应、IIR滤波器滤波、读写wav音频文件

目录 一、参考文献 1、scipy接口 2、scipy库介绍+IIR滤波器设计(含GUI)+绘制频谱响应

关于SQL查询效率,100w数据,查询只要1秒

原文:关于SQL查询效率&#xff0c;100w数据&#xff0c;查询只要1秒1.关于SQL查询效率&#xff0c;100w数据&#xff0c;查询只要1秒&#xff0c;与您分享:机器情况p4: 2.4内存: 1 Gos: windows 2003数据库: ms sql server 2000目的: 查询性能测试,比较两种查询的性能SQL查询效…

OpenCV学习笔记(五十四)——概述FaceRecognizer人脸识别类contrib

在最新版的2.4.2中&#xff0c;文档的更新也是一大亮点&#xff0c;refrence manual扩充了200多页的内容&#xff0c;添加了contrib部分的文档。contrib就是指OpenCV中新添加的模块&#xff0c;但又不是很稳定&#xff0c;可以认为是一个雏形的部分。这次结合refman的阅读&…

【调试】Linux下超强内存检测工具Valgrind

【调试】Linux下超强内存检测工具Valgrind 内容简介 Valgrind是什么&#xff1f;Valgrind的使用Valgrind详细教程1. Valgrind是什么&#xff1f; Valgrind是一套Linux下&#xff0c;开放源代码&#xff08;GPLV2&#xff09;的仿真调试工具的集合。Valgrind由内核&#xff08;c…

【python学习】——读取csv文件

file_name rD:\ParttimeJobs\MinistConfiguration\datas\mnist_train.csv # 数据集为42000张带标签的28x28手写数字图像y []x []y_t []x_t []with open(file_name, r) as f:reader csv.reader(f)header_row next(reader)# print(header_row)for row in reader:if np.ra…

机器学习实战(python)-Ch02KNN-Notes

Chapter2 KNN 1.numpy.tile函数 格式&#xff1a;tile&#xff08;A,reps&#xff09; * A&#xff1a;array_like * 输入的array * reps&#xff1a;array_like * A沿各个维度重复的次数 举例&#xff1a;A[1,2] 1. tile(A,2) 结果&#xff1a;[1,2,1,2] 2. tile(A,(2,3)) 结果…

猜1-10的数字python脚本

#!/usr/bin/python#coding:utf-8import randomnumrandom.randint(1,10)while True:caiint(raw_input(请输入随机数字:))if cai num:print 猜对了exit()elif cai > num:print 猜大了else:print 猜小了非交互式的cp脚本#!/usr/bin/python#coding:utf-8import sysfile1sys.arg…

惯量匹配和最佳传动比

惯量是刚体绕轴转动惯性的度量&#xff0c;转动惯量是表征刚体转动惯性大小的物理量。它是伺服选型的重要标准&#xff0c;如果惯量匹配不好&#xff0c;会导致电机运行不稳定。如小惯量电机制动性能好&#xff0c;运行反应速度快&#xff0c;适用于轻负载、高速定位的环境;而中…

【pyqt5学习】——滑动条的使用slider

1、获取滑动条当前值: 滑动条名称.value() self.threshold1 self.horizontalSlider.value() self.threahold2 self.horizontalSlider_2.value() 2、滑动条值改变信号绑定槽函数 滑动条名称.valueChanged.connect(槽函数&#xff09; # 滑条值变化 self.horizontalSlider.valu…

hibernate多对一单向外键

hibernate多对一单向外键&#xff1a; 描述&#xff1a; 转载于:https://www.cnblogs.com/blogofwyl/p/5402197.html

Spring在bean配置文件中定义电子邮件模板

在上一篇Spring电子邮件教程&#xff0c;硬编码的所有电子邮件属性和消息的方法体中的内容&#xff0c;这是不实际的&#xff0c;应予以避免。应该考虑在Spring bean 配置文件中定义电子邮件模板。1.Spring的邮件发件人Java类使用 Spring的MailSender接口发送电子邮件&#xff…

斐波那契数列规律的计算。

斐波那契数列就是某一个数&#xff0c;总是前两个数之和&#xff0c;比如0&#xff0c;1&#xff0c;1&#xff0c;2&#xff0c;3&#xff0c;5&#xff0c;8。由于输出是一串数字&#xff0c;可以用列表的结构存储。开始时&#xff0c;列表中有两个值&#xff0c;即0&#xf…

【PyQt5学习】——颜色面板使用(QcolorDialog)

from PyQt5.QtGui import * from PyQt5.QtCore import * from PyQt5.QtWidgets import * BB = QDialogButtonBox# 颜色窗口 class ColorDialog(QColorDialog):def __init__(self, parent=None):super(ColorDialog, self).__init__(parent)self.setOption(QColorDialog.ShowAlph…

PropertyPlaceholderConfigurer实现配置文件读取

PropertyPlaceholderConfigurer实现配置文件读取 PropertyPlaceholderConfigurer类的主要的用法是将BeanFactory里定义的内容放在一个.properties的文件中. PropertyPlaceholderConfigurer是个bean工厂后置处理器的实现&#xff0c;也就是BeanFactoryPostProcessor接口的一个实…

算法练习5---快速排序Java版

基本思想&#xff1a;通过一趟排序将要排序的数据分割成独立的两部分&#xff0c;其中一部分的所有数据都比另外一部分的所有数据都要小&#xff0c;然后再按此方法对这两部分数据分别进行快速排序&#xff0c;整个排序过程可以递归进行&#xff0c;以此达到整个数据变成有序序…

OPENCV回调函数

OPENCV回调函数 回调函数 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针&#xff08;地址&#xff09;作为参数传递给另一个函数&#xff0c;当这个指针被用来调用其所指向的函数时&#xff0c;我们就说这是回调函数。回调函数不是由该函数的实现方法直接调用…

PostCSS自学笔记(二)【番外篇二】

图解PostCSS的插件执行顺序 文章其实是一系列的早就写完了. 才发现忘了发在SegmentFault上面, 最早发布于https://gitee.com/janking/Inf... 这次我继续研究PostCSS的插件的执行顺序。 之前有研究过做过假设&#xff0c;在插件列表中&#xff0c;PostCSS的插件执行顺序自上而下…

【Python学习】——实现文本的朗读(pyttsx3)

import pyttsx3engine = pyttsx3.init() engine.say(三角形)engine.runAndWait() 1、导入第三方库 import pyttsx32、创建朗读器 engine = pyttsx3.init() 3、输入需要朗读的文本 engine.say(三角形) 4、开始朗读并且发声(这一步不能少,不然没有声音) engine.runAndWait() 参…