[COCI2015]ZGODAN
题目大意:
给你一个数$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的更多相关文章
- BZOJ 3881: [Coci2015]Divljak [AC自动机 树链的并]
3881: [Coci2015]Divljak 题意:添加新文本串,询问某个模式串在多少种文本串里出现过 模式串建AC自动机,考虑添加一个文本串,走到的节点记录下来求树链的并 方法是按dfs序排序去重 ...
- BZOJ3810: [Coci2015]Stanovi
3810: [Coci2015]Stanovi Description Input 输入一行,三个整数,n, m, k Output 输出一个数,表示最小不满意度. Sample Input ...
- [COCI2015]COCI
[COCI2015]COCI 题目大意: 有\(n(n\le5\times10^5)\)个人比赛,比赛总共进行\(3\)轮,每一轮得分为\([0,650]\)内的整数.现在已经得知每个人前两轮的成绩. ...
- [Coci2015]Kamp
Description 一颗树n个点,n-1条边,经过每条边都要花费一定的时间,任意两个点都是联通的. 有K个人(分布在K个不同的点)要集中到一个点举行聚会. 聚会结束后需要一辆车从举行聚会的这点出发 ...
- BZOJ 3881: [Coci2015]Divljak
3881: [Coci2015]Divljak Time Limit: 20 Sec Memory Limit: 768 MBSubmit: 553 Solved: 176[Submit][Sta ...
- 【BZOJ3881】[Coci2015]Divljak fail树+树链的并
[BZOJ3881][Coci2015]Divljak Description Alice有n个字符串S_1,S_2...S_n,Bob有一个字符串集合T,一开始集合是空的. 接下来会发生q个操作,操 ...
- 【BZOJ3743】[Coci2015]Kamp 树形DP
[BZOJ3743][Coci2015]Kamp Description 一颗树n个点,n-1条边,经过每条边都要花费一定的时间,任意两个点都是联通的. 有K个人(分布在K个不同的点)要集中到一个点举 ...
- 【BZOJ3745】[Coci2015]Norma cdq分治
[BZOJ3745][Coci2015]Norma Description Input 第1行,一个整数N: 第2~n+1行,每行一个整数表示序列a. Output 输出答案对10^9取模后的结果. ...
- bzoj3743 [Coci2015]Kamp 常州模拟赛d6t2
3743: [Coci2015]Kamp Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 484 Solved: 229[Submit][Status ...
随机推荐
- freemaker示例
第一步 创建一个User.java文件 来两个变量 public class User { private String userName; private String us ...
- Python 第一周编程作业
一. 编程题 1. 结合turtle库使用手册,读懂下列代码,并在jupyter编译器中运行观察结果: 依次分析下代码: 第一行 通过保留字import引用了Python中用于绘制图形的turtl ...
- Python数据分析-Matplotlib图标绘制
Matplotlib介绍 Matplotlib是一个强大的Python绘图和数据可视化的工具包. Matplotlib的主要功能 Matplotlib是python中的一个包,主要用于绘制2D图形(当 ...
- python鉴黄程序
最近有客户向服务器上传了些垃圾图片,和正常图片混合在一起,大概有10W张的数量,在经历了大概3个小时翻了2000多张的时候,手指抽了下,感觉很不舒服,硬着头皮上,写个程序鉴别下吧,但是怎么搞呢,经过从 ...
- stuff使用感悟
select ),t2.CityId) from t t2 where not exists( from Web_UserCity uc where UserName='user001' and uc ...
- 软考——(5)计算机系统之CPU组成
其实我们很早就接触过计算机系统方面的知识,但是还是出现印象不深,理解不清楚的现象,丢分很严重.这部分的知识需要我们花功夫去理解,因为很多东西我们接触不到,比如校验码.码制等,如果你不去理解而是去记,就 ...
- DP石子合并问题
转自:http://www.hnyzsz.net/Article/ShowArticle.asp?ArticleID=735 [石子合并] 在一个圆形操场的四周摆放着n 堆石子.现要将石子有次序 ...
- PHP高级——抽象类与接口的区别
在学习PHP面向对象时,都会在抽象类与接口上迷惑,作用差不多为什么还那么容易混淆,何不留一去一?但是事实上两者的区别还是很大的,如果能够很好地运用PHP的两个方法,面向对象的程序设计将会更加合理.清晰 ...
- [bzoj3270] 博物馆 [期望+高斯消元]
题面 传送门 思路 本题的点数很少,只有20个 考虑用二元组$S=(u,v)$表示甲在$u$点,乙在$v$点的状态 那么可以用$f(S)$表示状态$S$出现的概率 不同的$f$之间的转移就是通过边 转 ...
- BZOJ 2458: [BeiJing2011]最小三角形 | 平面分治
题目: 给出若干个点 求三个点构成的周长最小的三角形的周长(我们认为共线的三点也算三角形) 题解: 可以参考平面最近点对的做法 只不过合并的时候改成枚举三个点更新周长最小值,其他的和最近点对大同小异 ...