Dãy số liên tục


Submit solution

Points: 2 (partial)
Time limit: 1.0s
Memory limit: 977M

Author:
Problem type
Allowed languages
Ada, Assembly, Awk, C, C++, C11, CLANG, CLANGX, Classical, COBOL, Coffee, CSC, D lang, DART, F95, FORTH, Fortrn, GAS32, GO, Haskell, Itercal, Java, kotlin, LEAN, LISP, LUA, MONOVB, Nasm, OCAML, Pascal, Perl, php, PIKE, prolog, Pypy, Python, Ruby 2, RUST, Scala, SCM, SED, SWIFT, TCL, TUR, V8JS, VB, ZIG

Bài toán

Hôm nay hướng dẫn vòng lặp for cho sinh viên in ra k (k > 1) số nguyên dương liên tiếp bắt đầu từ một số nguyên dương x nào đó. Một sinh viên đã không in những khoảng trống giữa các số nên đã tạo thành dãy số dài. Nhìn vào kết quả dãy in ra Tichpx đã biết ngay ra là in ra từ số nào nhưng các bạn sinh viên lúng túng đoán mãi chưa ra. Bạn hãy lập trình trả lời giúp cho các bạn là bắt đầu từ số nào nhé

Ví dụ: Nếu xuất hiện chuỗi "9899100101102" thì số bắt đầu là 98 tiếp theo là 99, 100, 101 và 102

Input

Dòng đầu tiên là số nguyên dương n là số bộ test nhỏ hơn 20
n dòng tiếp theo mỗi dòng một xâu có độ dài không vượt quá 32

Output

Với mỗi xâu test sẽ in ra kết quả trên một dòng
Nếu tìm được số x thì in ra "YES" và theo sau là số x bắt đầu đó
Nếu không tìm được thì in ra "NO"

Ví dụ

Input

6
678910111213
3568
102103104
989
3
02030405

Output

YES 6
NO
YES 102
NO
NO
NO

Chú ý Dãy số in ra không được có chữ số 0 ở đầu nên dãy "02030405" thì có kết quả là NO

tichpx

Comments


  • 3
    shioiori  commented on Oct. 24, 2021, 3:53 p.m.

    Tuyệt vời, tiếp tục với series lọt test của mình :D

    Ở bài này mình duyệt

    for (int i=0; i<=s.size()/2; ++i)

    Với trường hợp có 2 chữ số không liền nhau (vd: 13) thì nó sẽ ra "YES 13" (đáp án đúng là "NO")

    Lẽ ra nên bỏ dấu = mà lúc thi mình lú thế nào nhét vào luôn.

    Code tham khảo (thay vì tách xâu, mình ghép xâu):

    #include<bits/stdc++.h> 
    using namespace std; 
    typedef long long ll;    
    int main(){
        ios_base::sync_with_stdio(false);
        cin.tie(0);
        int tc;
        cin >> tc;
        while (tc--){
            string s;
            cin >> s;
            if (s.size()==1 || s[0]=='0') cout << "NO\n";
            else {
                ll n=0;
                int kt=0;
                for (int i=0; i<s.size()/2; ++i){
                    n=n*10+(s[i]-'0');
                    string t = to_string(n);
                    ll d=n+1;
                    while (t.size()<s.size()){
                        t+=to_string(d);
                        d++;
                    }
                    if (t.size()!=s.size()) continue;
                    else if (t==s){
                        kt=1;
                        cout << "YES " << n << endl;
                        break;
                    }
                }
                if (!kt) cout << "NO\n";
            }
        }
        return 0; }