十六届金马五校 I: 二数

1人阅读 评论(0) 收藏 举报
分类:
链接:https://www.nowcoder.com/acm/contest/91/I
来源:牛客网

我们把十进制下每一位都是偶数的数字叫做“二数”。
小埃表示自己很聪明,最近他不仅能够从小数到大:2,3,4,5....,也学会了从大数到小:100,99,98...,他想知道从一个数开始数最少的数就得到一个二数。但是聪明的小森已经偷偷在心里算好了小埃会数到哪个二数,请你求出他要数到哪个数吧。
换句话说,给定一个十进制下最多105位的数字,请你求出和这个数字的差的绝对值最小的二数,若答案不唯一,输出最小的那个。
也就是说,给定数字n,求出m,使得abs(n-m)最小且m[i] mod 2 = 0

输入描述:

1 ≤ T ≤ 100, 1 ≤ n ≤ 10100000 − 1, T组数据的数字的十进制表示长度总和不超过1000000

输出描述:

每行一个整数 m 第 i 行表示第 i 个数所对应的“最邻近二数”
示例1

输入

5
42
11
1
2018
13751

输出

42
8
0
2020
8888


题解:很显然第一位不是偶数的数要么+1,要么-1,如果为9只能减1,那么问题就是如果判断第一位奇数+1还是-1,我们发现x4444这种数是个分界线,x444变成(x+1)000和(x-1)888结果一样,所以模拟下即可。

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
const int N = 1E5 + 7;
char s[N];

int main()
{
    int T;
    scanf("%d", &T);
    while(T --) {
        string res;
        scanf("%s", s+1);
        int n = strlen(s+1);
        for(int fg = 0, i = 1;i <= n;i ++) {
            if(!fg) {
                int t = s[i] - '0';
                if(t % 2 == 0) {
                    res += s[i];
                    continue;
                }
                if(t == 9) {
                    fg = 1;
                    res += '8';
                    continue;
                }
                bool ok = 1;
                for(int j = i + 1;j <= n;j ++) {
                    if(s[j] == '4') continue;
                    if(s[j] < '4') break;
                    if(s[j] > '4') {
                        ok = 0; break;
                    }
                }
                if(ok) {
                    res += (s[i] - 1);
                    fg = 1;
                }
                else {
                    res += (s[i] + 1);
                    fg = 2;
                }
            } else {
                if(fg == 1) res += '8';
                else res += '0';
            }
        }
        if((int)res.size() == 1) {
            cout << res << '\n';
        } else {
            int pos = 0;
            if(res[0] == '0') res.erase(res.begin());
            cout << res << endl;
        }
    }
    return 0;
}


查看评论

SEM实战教程(五)

SEM实战培训,主要针对零基础到高手的实战操作和数据分析等的系列的培训课程,由SEM实战网老卢培训和服务,以实战为基础,解决竞价中所遇到的问题就是最大的实战,故言SEM实战培训。
  • 2017年03月13日 17:09

金马五校赛 I : 二数

题目链接:点击打开链接大意:给定一个十进制下最多105位的数字,请你求出和这个数字的差的绝对值最小的二数,若答案不唯一,输出最小的那个。 也就是说,给定数字n,求出m,使得abs(n-m)最小且...
  • swunHJ
  • swunHJ
  • 2018-04-15 20:19:14
  • 19

2017上海金马五校程序设计竞赛部分题解

Problem A : STEED Cards From: DHUOJ, 2017060301 Submit (Out of Contest) Time ...
  • moonlighttlj
  • moonlighttlj
  • 2017-06-03 20:30:13
  • 650

2017年上海金马五校赛 解题报告

Before这个比赛有一个资格赛,但是跟蓝桥杯决赛冲突了所以不能参加,没想到老师帮我们申请了参赛资格,意外之喜。 因为题目实在太多了,代码就不贴在博客里了。。。想看代码的童鞋可以去github上看看...
  • woshirenNo01
  • woshirenNo01
  • 2017-06-04 09:33:52
  • 926

2017年上海金马五校程序设计竞赛 I : Frog's Jumping 找规律

Description There are n lotus leaves floating like a ring on the lake, which are numbered 0, 1,...
  • qq_36652619
  • qq_36652619
  • 2017-06-03 21:43:21
  • 303

【金马五校赛】I 二数(模拟)

链接:https://www.nowcoder.com/acm/contest/91/I 来源:牛客网 我们把十进制下每一位都是偶数的数字叫做“二数”。 小埃表示自己很聪明,最近他不仅能够从小数...
  • feng_zhiyu
  • feng_zhiyu
  • 2018-04-17 15:49:59
  • 7

2017年上海金马五校程序设计竞赛(网上资格赛) A : Corn's new language(括号匹配+求深度)

Problem A : Corn's new language From: DHUOJ, 2017052401 Submit (Out of Contest) ...
  • xunalove
  • xunalove
  • 2017-05-29 14:35:49
  • 402

2017年上海金马五校程序设计竞赛:Problem I : Frog's Jumping

Problem I : Frog's Jumping From: DHUOJ, 2017060309 Submit (Out of Contest) Time Limit: 1 s...
  • wyxeainn
  • wyxeainn
  • 2017-06-03 20:15:53
  • 880

2017上海金马五校程序设计竞赛 O:An Easy Problem

Description Zhu Ge is a very clever boy. One day, he discovered 2*n numbers. He wanted to div...
  • qq_37412229
  • qq_37412229
  • 2017-06-04 16:26:16
  • 338

2017年上海金马五校程序设计竞赛(网上资格赛)Problem B : Coach

Description In the ACM training team, the coach wants to split all students into many groups and ...
  • qq_36652619
  • qq_36652619
  • 2017-05-26 20:31:57
  • 121
    个人资料
    持之以恒
    等级:
    访问量: 5717
    积分: 1542
    排名: 3万+