zoukankan      html  css  js  c++  java
  • FZU 2159 WuYou

    FZU 2159

    题意:给你两个串,A串和B串,其中A串有些不确定。叫你求 A < B的最大A串

    做法:一开始做错了。去问小坤子,他讲了一下他的思路。就是开一个 f 数组。f[i]表示从第i位开始存不存在方案,如果前面都相等的话。从n-1位开始扫

    然后再从第0位开始扫,if( f[i] == 1 ) ,则s[i] = ch[i];   if( f[i] == 0 )的话,就看这一位是不是'0',不是'0'的话,s[i] = ch[i] - 1,就可以break了,后面的问号都可以变成9。如果是'0'的话,s[i] = '0',继续向后扫。如果s[i] < ch[i]了,就break,后面的问号都可以填9。具体看代码吧

     1 #include<iostream>
     2 #include<cstring>
     3 #include<cstdio>
     4 #include<algorithm>
     5 #include<cmath>
     6 #include<vector>
     7 #include<queue>
     8 
     9 using namespace std;
    10 
    11 #define inf 1e16
    12 #define eps 1e-6
    13 #define LL long long
    14 #define ULL unsigned long long
    15 #define MP make_pair
    16 #define pb push_back
    17 #define mod 1000000009
    18 #define lson l, m, rt<<1
    19 #define rson m+1, r, rt<<1|1
    20 #define mnx 200050
    21 
    22 char s[mnx], ch[mnx];
    23 bool check(){
    24     int n = strlen( s );
    25     if( s[0] == '0' ) return false;
    26     for( int i = 0; i < n; ++i ){
    27         if( s[i] > ch[i] ) return false;
    28         if( s[i] < ch[i] ) return true;
    29     }
    30     return false;
    31 }
    32 int f[mnx];
    33 int main(){
    34     int cas;
    35     scanf( "%d", &cas );
    36     while( cas-- ){
    37         scanf( "%s", s );
    38         scanf( "%s", ch );
    39         int n = strlen( s );
    40         f[n] = 0;
    41         for( int i = n-1; i >= 0; --i ){
    42             if( s[i] == '?' ){
    43                 if( ch[i] > '0' ) f[i] = 1;
    44                 else f[i] = f[i+1];
    45             }
    46             else if( ch[i] > s[i] )
    47                 f[i] = 1;
    48             else if( ch[i] == s[i] )
    49                 f[i] = f[i+1];
    50             else f[i] = 0;
    51         }
    52         int cur;
    53         for( int i = 0; i < n; ++i ){
    54             if( s[i] == '?' ){
    55                 if( f[i+1] == 1 )
    56                     s[i] = ch[i];
    57                 else{
    58                     if( ch[i] == '0' ) s[i] = '0';
    59                     else {
    60                         s[i] = (char)( ch[i] - 1 ), cur = i + 1; break;
    61                     }
    62                 }
    63             }
    64             else{
    65                 if( s[i] < ch[i] ){
    66                     cur = i + 1; break;
    67                 }
    68             }
    69         }
    70         for( int i = cur; i < n; ++i ){
    71             if( s[i] == '?' )
    72                 s[i] = '9';
    73         }
    74         if( check() ) printf( "%s
    ", s );
    75         else puts( "-1" );
    76     }
    77     return 0;
    78 }
    View Code
  • 相关阅读:
    ‘Host’ is not allowed to connect to this mysql server
    centos7安装mysql
    further configuration avilable 不见了
    Dynamic Web Module 3.0 requires Java 1.6 or newer
    hadoop启动 datanode的live node为0
    ssh远程访问失败 Centos7
    Linux 下的各种环境安装
    Centos7 安装 python2.7
    安装scala
    Centos7 安装 jdk 1.8
  • 原文地址:https://www.cnblogs.com/LJ-blog/p/4363650.html
Copyright © 2011-2022 走看看