QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#791333#9738. Make It DivisibleLinx#WA 0ms3776kbC++172.3kb2024-11-28 18:07:592024-11-28 18:08:01

Judging History

你现在查看的是最新测评结果

  • [2024-11-28 18:08:01]
  • 评测
  • 测评结果:WA
  • 用时:0ms
  • 内存:3776kb
  • [2024-11-28 18:07:59]
  • 提交

answer

#include<bits/stdc++.h>

using namespace std;
typedef long long ll;
typedef pair<int, int> pii;



void solve() {
    int n, k;
    cin >> n >> k;
    std::vector<int> a(n + 1);
    for(int i = 1; i <= n; i ++ ) {
        cin >> a[i];
    }
    bool ok = 1;
    for(int i = 1; i <= n; i ++ ) {
        if(a[i] != a[1]) {
            ok = 0;
            break;
        }
    }
    if(ok) {
        cout << k << ' ' << (ll)(k + 1) * k / 2 << '\n';
        return ;
    }
    deque<int> dq;
    vector<pii> b;
    for(int i = 1; i <= n; i ++ ) {
        while(dq.size() && dq.back() <= a[i]) {
            dq.pop_back();
        }
        if(dq.size()) {
            b.push_back({dq.back(), a[i]});
        }
        dq.push_back(a[i]);
    }
    while(dq.size()) dq.pop_back();
    for(int i = n; i >= 1; i -- ) {
        while(dq.size() && dq.back() <= a[i]) {
            dq.pop_back();
        }
        if(dq.size()) {
            b.push_back({dq.back(), a[i]});
        }
        dq.push_back(a[i]);
    }
    bool fg = 0;
    set<int> st;
    for(auto [x, y] : b) {
        int tmp = x - y;
        if(!fg) {
            for(int i = 1; i <= tmp / i; i ++ ) {
                if(tmp % i == 0) {
                    if(tmp / i > y && tmp / i - y <= k) {
                        st.insert(tmp / i - y);
                    }
                    if(i > y && i - y <= k) {
                        st.insert(i - y);
                    }
                }
            }
            fg = 1;
        } else {
            set<int> st2;
            for(int i = 1; i <= tmp / i; i ++ ) {
                if(tmp % i == 0) {
                    if(tmp / i > y && tmp / i - y <= k && st.find(tmp / i - y) != st.end()) {
                        st2.insert(tmp / i - y);
                    }
                    if(i > y && i - y <= k && st.find(i - y) != st.end()) {
                        st2.insert(i - y);
                    }
                }
            }
            swap(st, st2);
        }
    }
    cout << st.size() << ' ';
    ll tot = 0;
    for(auto x : st) {
        tot += x;
    }
    cout << tot << '\n';
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);
    
    int t = 1;
    cin >> t;
    while(t -- ) {
        solve();
    }
    
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 3604kb

input:

3
5 10
7 79 1 7 1
2 1000000000
1 2
1 100
1000000000

output:

3 8
0 0
100 5050

result:

ok 3 lines

Test #2:

score: -100
Wrong Answer
time: 0ms
memory: 3776kb

input:

4
201 1000000000
1 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5...

output:

1 1
1 1
1 1
1 1

result:

wrong answer 1st lines differ - expected: '0 0', found: '1 1'