CF550C. Divisibility by Eight

发布时间 2024-01-12 00:07:39作者: jvdyvan

题目大意

给你一个由阿拉伯数字组成的字符串,让你找出其中一个子序列,使其能被8整除

思路1

一个整数的末尾三位数能被8整除,则这个数能被8整除。

代码

#include <bits/stdc++.h>

using namespace std;
using i64 = long long;
const i64 inf = 8e18;
typedef pair<int, int> pii;
const int N = 1e5 + 10;

void solve() {
    set<string> se;
    for (int i = 0; i < 1000; i++)
        if (i % 8 == 0) se.insert(to_string(i));


    string s, t;
    cin >> s;
    for (int i = 0; i < s.size(); i++) {
        t.push_back(s[i]);
        if (se.find(t) != se.end()) {
            cout << "YES\n" << t << endl;
            return;
        }
        
        for (int j = i + 1; j < s.size(); j++) {
            t.push_back(s[j]);
            if (se.find(t) != se.end()) {
                cout << "YES\n" << t << endl;
                return;
            }
            
            for (int k = j + 1; k < s.size(); k++) {
                t.push_back(s[k]);
                if (se.find(t) != se.end()) {
                    cout << "YES\n" << t << endl;
                    return;
                }
                t.pop_back();
            }
            
            t.pop_back();
        }
        
        t.pop_back();
    }

    cout << "NO\n";
}

int main() {
    ios::sync_with_stdio(0); cin.tie(0);
    cout.tie(0);

    int t = 1;
    //cin >> t;
    while (t --) solve();

    return 0;
}