Closed. This question needs details or clarity。它当前不接受答案。












想改善这个问题吗?添加详细信息,并通过editing this post阐明问题。

12个月前关闭。



Improve this question




#include <iostream>
#include <bits/stdc++.h>
using namespace std;

int main()
{
    string s;
    cin >> s;
    long long a;
    long long b;
    cin >> a;
    cin >> b;
    long long n = s.length();
    long long y = 1;
    while (s[n - a] - 48 == 0)
        y++;
    vector<long long> v;
    long long c = 0;
    for (long long i = 0; i < n - y; i++) {
        long long x = s[i] - 48;
        if (c < a) {
            c = c * 10;
            c += x;
        }
        c = c % a;
        if (c == 0 && s[i + 1] != '0') {
            v.push_back(i);
        }
    }
    cout << v[0] << endl;
    for (long long j = 0; j < v.size(); j++) {
        c = 0;
        for (long long i = v[j] + 1; i < n; i++) {
            long long x = s[i] - 48;
            if (c < b) {
                c = c * 10;
                c += x;
            }
            c = c % b;
        }
        if (c == 0) {
            cout << "YES" << endl;
            cout << s.substr(0, v[j] + 1) << endl
                 << s.substr(v[j] + 1, n - v[j] - 1);
            return 0;
        }
    }
    cout << "NO";
}
  • 测试用例
    39915186055525904358
    90102 63169402
    除上述一种以外,其他测试用例都可以正常工作。直到第7行编码正常为止。但是在输入“b”代码时会被转储。
    https://codeforces.com/contest/490/my。最后提交。我在第19个测试用例上遇到运行时错误。
  • 最佳答案

    假设“Testcase 39915186055525904358 90102 63169402”是失败的输入,您将获得以下情形:

    cin >> s; // reads "Testcase"
    cin >> a; // reads 39915186055525904358
    cin >> b; // reads 90102
    

    然后在
    while (s[n - a] - 48 == 0) y++;
    

    您尝试访问的索引为负,这会导致分段错误。

    这也是一个无休止的循环,因为您从不修改sna

    如果“Testcase”仅是前缀,而实际测试数据仅是“39915186055525904358 90102 63169402”,则s是“39915186055525904358”,并且a将是90102,仍然比s的长度还多。

    08-04 00:21