CSES - Aalto Competitive Programming 2024 - wk7 - Mon - Results
Submission details
Task:3SUM
Sender:paulschulte
Submission time:2024-10-21 16:28:38 +0300
Language:C++ (C++17)
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.00 sdetails
#2ACCEPTED0.00 sdetails
#3ACCEPTED0.00 sdetails
#4ACCEPTED0.00 sdetails
#5ACCEPTED0.01 sdetails
#6ACCEPTED0.00 sdetails
#7ACCEPTED0.00 sdetails
#8ACCEPTED0.00 sdetails
#9ACCEPTED0.00 sdetails
#10ACCEPTED0.02 sdetails
#11ACCEPTED0.02 sdetails
#12ACCEPTED0.01 sdetails
#13ACCEPTED0.02 sdetails
#14ACCEPTED0.02 sdetails
#15ACCEPTED0.02 sdetails
#16ACCEPTED0.01 sdetails
#17ACCEPTED0.01 sdetails
#18ACCEPTED0.01 sdetails
#19ACCEPTED0.02 sdetails
#20ACCEPTED0.01 sdetails
#21ACCEPTED0.02 sdetails
#22ACCEPTED0.02 sdetails
#23ACCEPTED0.00 sdetails

Code

// ~/.vim/cpp_template.cpp
#include <bits/stdc++.h>
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <limits>

#define REP(i,a,b) for (int i = a; i < b; i++)

// Type Aliases for 1D and 2D vectors with initialization
#define vi(n, val) vector<int>(n, val) // 1D vector of ints with size n, initialized to val
#define vll(n, val) vector<long long>(n, val) // 1D vector of long longs with size n, initialized to val
#define ll long long
#define vvi(n, m, val) vector<vector<int>>(n, vector<int>(m, val)) // 2D vector of ints (n x m), initialized to val
#define vvll(n, m, val) vector<vector<long long>>(n, vector<long long>(m, val)) // 2D vector of long longs (n x m), initialized to val

#define LL_INF std::numeric_limits<long long int>::max()
#define INF std::numeric_limits<int>::max()


using namespace std;


template <typename T>
void pV(const std::vector<T>& vec, const std::string& label = "Vector") {
    std::cout << label << ": [ ";
    for (const auto& elem : vec) {
        std::cout << elem << " ";
    }
    std::cout << "]" << std::endl;
}


void dfs(int s, vector<bool> *visited, vector<int> (*adj)[]) {
    if ((*visited)[s]) return;
    (*visited)[s] = true;
    // process node s


    for (auto u: (*adj)[s]) {
        dfs(u, visited, adj);
    }
}
/*
// DEPTH-FRIRST-SEARCH
vector<int> adj[N];                                                          
vector<bool> visited(N, false);
int u, v;
for(int i = 0; i < M;i++){
    cin >> u >> v;
    u--;
    v--;
    adj[u].push_back(v);
    adj[v].push_back(u);
}
*/

vector<long long> dijkstra(int N, int x, vector<vector<pair<int,int>>> *adj){
    vector<bool> processed(N, false);
    vector<long long> distance(N, LL_INF);
    priority_queue<pair<long long,int>> q;
    //for (int i = 1; i <= n; i++) distance[i] = INF;
    distance[x] = 0;
    q.push({0,x});
    while (!q.empty()) {
        int a = q.top().second; q.pop();
        if (processed[a]) continue;
        processed[a] = true;
        for (auto u : (*adj)[a]) {
            int b = u.first, w = u.second;
            if (distance[a]+w < distance[b]) {
                distance[b] = distance[a]+w;
                q.push({-distance[b],b});
            }
        }
    }
    return distance;


}


/*
DIJKSTRA
//vector<vector<pair<int,int>>> adj(N, vector<pair<int, int>>(N));
*/



int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    // Your code starts here
    long long n, x;
    cin >> n >> x;
    vector<pair<long long, long long>> arr(n);

    REP(i, 0, n){
        cin >> arr[i].first;
        arr[i].second = i + 1;
    }

    sort(arr.begin(), arr.end());

    REP(i, 0, n-2){
        long long target = x - arr[i].first;
        long long left = i + 1;
        long long right = n - 1;

        while (left < right) {
            long long sum = arr[left].first + arr[right].first;
            if (sum == target) {
                cout << arr[i].second << " " << arr[left].second << " " << arr[right].second << endl;
                return 0;
            } else if (sum < target) {
                left++;
            } else {
                right--;
            }
        }
    }
    
    cout << "IMPOSSIBLE" << endl;    


    return 0;
}


Test details

Test 1

Verdict: ACCEPTED

input
1 3
1

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 2

Verdict: ACCEPTED

input
3 5
1 3 2

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 3

Verdict: ACCEPTED

input
3 6
1 3 2

correct output
1 3 2

user output
1 3 2

Test 4

Verdict: ACCEPTED

input
3 7
3 2 1

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 5

Verdict: ACCEPTED

input
7 3
2 1 1 2 2 1 1

correct output
2 3 7

user output
2 3 7

Test 6

Verdict: ACCEPTED

input
7 4
1 1 2 2 1 2 1

correct output
1 2 6

user output
1 2 6

Test 7

Verdict: ACCEPTED

input
7 5
1 2 1 2 2 1 1

correct output
1 2 5

user output
1 2 5

Test 8

Verdict: ACCEPTED

input
7 6
2 1 1 1 1 2 2

correct output
1 6 7

user output
1 6 7

Test 9

Verdict: ACCEPTED

input
5000 3
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

correct output
1 2 5000

user output
1 2 5000

Test 10

Verdict: ACCEPTED

input
5000 4
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 11

Verdict: ACCEPTED

input
5000 6
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

correct output
714 3518 4240

user output
714 3518 4240

Test 12

Verdict: ACCEPTED

input
5000 919900245
663612758 9075403 585385629 98...

correct output
2787 465 2266

user output
2787 465 2266

Test 13

Verdict: ACCEPTED

input
5000 999989608
12983 25966 38949 51932 64915 ...

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 14

Verdict: ACCEPTED

input
5000 1000000000
65536 131072 196608 262144 327...

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 15

Verdict: ACCEPTED

input
5000 642700000
6427 12854 19281 25708 32135 3...

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 16

Verdict: ACCEPTED

input
5000 919900246
663612758 9075403 585385629 98...

correct output
193 1698 4019

user output
193 1698 4019

Test 17

Verdict: ACCEPTED

input
5000 919900247
663612758 9075403 585385629 98...

correct output
4258 470 1911

user output
4258 470 1911

Test 18

Verdict: ACCEPTED

input
5000 6
6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ...

correct output
4998 4999 5000

user output
4998 4999 5000

Test 19

Verdict: ACCEPTED

input
5000 919900247
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 20

Verdict: ACCEPTED

input
4999 919900245
9075403 585385629 987230075 83...

correct output
2786 464 2265

user output
2786 464 2265

Test 21

Verdict: ACCEPTED

input
5000 1000000000
261323261 25262018 237798562 3...

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 22

Verdict: ACCEPTED

input
5000 76305003
1 5088 10175 15262 20349 25436...

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 23

Verdict: ACCEPTED

input
2 6
2 2

correct output
IMPOSSIBLE

user output
IMPOSSIBLE