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

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

 #include<cstdio>
#include<cstring>
const int LEN=;
char s[LEN],a[LEN],b[LEN],c[LEN],d[LEN],tmp[LEN];
int len;
inline void treat(char s[]) {
for(register int i=;i<len;i++) {
s[i]^='';
}
}
int main() {
gets(s);
len=strlen(s);
treat(s);
a[]=b[]=s[];
for(register int i=;i<len;i++) {
if((s[i-]&)^(s[i]&)) {
a[i]=b[i]=s[i];
} else {
if(s[i]!=) {
a[i]=s[i]-;
for(register int j=i+;j<len;j++) {
a[j]=a[j-]&?:;
}
}
if(s[i]!=) {
b[i]=s[i]+;
for(register int j=i+;j<len;j++) {
b[j]=b[j-]&?:;
}
}
if(s[i]==) {
treat(b);
puts(b);
return ;
}
if(s[i]==) {
treat(a);
puts(a);
return ;
}
for(register int j=len-;j>=i;j--) {
tmp[j]=s[j];
}
for(register int j=len-;j>=i;j--) {
if((signed char)tmp[j]<) {
tmp[j]+=;
tmp[j-]--;
}
c[j]+=tmp[j]-a[j];
if((signed char)c[j]<) {
c[j]+=;
tmp[j-]--;
}
}
for(register int j=len-;j>=i;j--) {
tmp[j]=b[j];
}
for(register int j=len-;j>=i;j--) {
if((signed char)tmp[j]<) {
tmp[j]+=;
tmp[j-]--;
}
d[j]+=tmp[j]-s[j];
if((signed char)d[j]<) {
d[j]+=;
tmp[j-]--;
}
}
treat(a);
treat(b);
for(register int j=i;j<len;j++) {
if(c[j]<d[j]) {
puts(a);
return ;
}
if(c[j]>d[j]) {
puts(b);
return ;
}
}
printf("%s %s\n",a,b);
return ;
}
}
return ;
}

[COCI2015]ZGODAN的更多相关文章

  1. BZOJ 3881: [Coci2015]Divljak [AC自动机 树链的并]

    3881: [Coci2015]Divljak 题意:添加新文本串,询问某个模式串在多少种文本串里出现过 模式串建AC自动机,考虑添加一个文本串,走到的节点记录下来求树链的并 方法是按dfs序排序去重 ...

  2. BZOJ3810: [Coci2015]Stanovi

    3810: [Coci2015]Stanovi Description Input 输入一行,三个整数,n, m, k   Output 输出一个数,表示最小不满意度.   Sample Input ...

  3. [COCI2015]COCI

    [COCI2015]COCI 题目大意: 有\(n(n\le5\times10^5)\)个人比赛,比赛总共进行\(3\)轮,每一轮得分为\([0,650]\)内的整数.现在已经得知每个人前两轮的成绩. ...

  4. [Coci2015]Kamp

    Description 一颗树n个点,n-1条边,经过每条边都要花费一定的时间,任意两个点都是联通的. 有K个人(分布在K个不同的点)要集中到一个点举行聚会. 聚会结束后需要一辆车从举行聚会的这点出发 ...

  5. BZOJ 3881: [Coci2015]Divljak

    3881: [Coci2015]Divljak Time Limit: 20 Sec  Memory Limit: 768 MBSubmit: 553  Solved: 176[Submit][Sta ...

  6. 【BZOJ3881】[Coci2015]Divljak fail树+树链的并

    [BZOJ3881][Coci2015]Divljak Description Alice有n个字符串S_1,S_2...S_n,Bob有一个字符串集合T,一开始集合是空的. 接下来会发生q个操作,操 ...

  7. 【BZOJ3743】[Coci2015]Kamp 树形DP

    [BZOJ3743][Coci2015]Kamp Description 一颗树n个点,n-1条边,经过每条边都要花费一定的时间,任意两个点都是联通的. 有K个人(分布在K个不同的点)要集中到一个点举 ...

  8. 【BZOJ3745】[Coci2015]Norma cdq分治

    [BZOJ3745][Coci2015]Norma Description Input 第1行,一个整数N: 第2~n+1行,每行一个整数表示序列a. Output 输出答案对10^9取模后的结果. ...

  9. bzoj3743 [Coci2015]Kamp 常州模拟赛d6t2

    3743: [Coci2015]Kamp Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 484  Solved: 229[Submit][Status ...

随机推荐

  1. freemaker示例

    第一步  创建一个User.java文件 来两个变量 public class User {      private String userName;       private String us ...

  2. Python 第一周编程作业

    一.  编程题 1.  结合turtle库使用手册,读懂下列代码,并在jupyter编译器中运行观察结果: 依次分析下代码: 第一行 通过保留字import引用了Python中用于绘制图形的turtl ...

  3. Python数据分析-Matplotlib图标绘制

    Matplotlib介绍 Matplotlib是一个强大的Python绘图和数据可视化的工具包. Matplotlib的主要功能 Matplotlib是python中的一个包,主要用于绘制2D图形(当 ...

  4. python鉴黄程序

    最近有客户向服务器上传了些垃圾图片,和正常图片混合在一起,大概有10W张的数量,在经历了大概3个小时翻了2000多张的时候,手指抽了下,感觉很不舒服,硬着头皮上,写个程序鉴别下吧,但是怎么搞呢,经过从 ...

  5. stuff使用感悟

    select ),t2.CityId) from t t2 where not exists( from Web_UserCity uc where UserName='user001' and uc ...

  6. 软考——(5)计算机系统之CPU组成

    其实我们很早就接触过计算机系统方面的知识,但是还是出现印象不深,理解不清楚的现象,丢分很严重.这部分的知识需要我们花功夫去理解,因为很多东西我们接触不到,比如校验码.码制等,如果你不去理解而是去记,就 ...

  7. DP石子合并问题

    转自:http://www.hnyzsz.net/Article/ShowArticle.asp?ArticleID=735 [石子合并]    在一个圆形操场的四周摆放着n 堆石子.现要将石子有次序 ...

  8. PHP高级——抽象类与接口的区别

    在学习PHP面向对象时,都会在抽象类与接口上迷惑,作用差不多为什么还那么容易混淆,何不留一去一?但是事实上两者的区别还是很大的,如果能够很好地运用PHP的两个方法,面向对象的程序设计将会更加合理.清晰 ...

  9. [bzoj3270] 博物馆 [期望+高斯消元]

    题面 传送门 思路 本题的点数很少,只有20个 考虑用二元组$S=(u,v)$表示甲在$u$点,乙在$v$点的状态 那么可以用$f(S)$表示状态$S$出现的概率 不同的$f$之间的转移就是通过边 转 ...

  10. BZOJ 2458: [BeiJing2011]最小三角形 | 平面分治

    题目: 给出若干个点 求三个点构成的周长最小的三角形的周长(我们认为共线的三点也算三角形) 题解: 可以参考平面最近点对的做法 只不过合并的时候改成枚举三个点更新周长最小值,其他的和最近点对大同小异 ...