CSES - Datatähti 2025 alku - Results
Submission details
Task:Kortit I
Sender:urkkiz
Submission time:2024-10-31 00:15:39 +0200
Language:C++ (C++17)
Status:READY
Result:0
Feedback
groupverdictscore
#10
#20
#30
Test results
testverdicttimegroup
#10.00 s1, 2, 3details
#20.00 s2, 3details
#30.00 s3details
#40.00 s3details
#50.00 s3details
#60.00 s3details
#70.00 s3details
#80.00 s3details
#90.00 s3details
#100.00 s3details
#110.00 s3details
#120.00 s3details
#130.00 s3details
#140.00 s3details
#150.00 s3details
#160.00 s3details
#170.00 s3details
#180.00 s3details
#190.00 s3details
#200.00 s3details

Compiler report

input/code.cpp: In function 'int main()':
input/code.cpp:37:13: warning: unused variable 'totalPoints' [-Wunused-variable]
   37 |         int totalPoints = pointsP1 + pointsP2;
      |             ^~~~~~~~~~~

Code

#include <iostream>
#include <list>
#include <algorithm>

using namespace std;
//i fucking HATE c++ for making me do THIS shit!!
bool ListContainsInt(list<int> list, int value)
{
    return std::find(list.begin(), list.end(), value) != list.end();
}
int main(){
    int t;
    cin >> t;
    int cardMatrix[t][3];
    for(int i = 0; i < t; i++){
        for(int j = 0; j < 3; j++){
            cin >> cardMatrix[i][j];
        }
    }
    list<int> intBlackListArrP1 = {}; //blacklist for other players card, basically.
    //possibly similar needed for other hand? 
    //yes.. here it is.
    list<int> intBlackListArrP2 = {};
    for(int i = 0; i < t; i++){
        intBlackListArrP1.clear();
        intBlackListArrP2.clear();
        int range = cardMatrix[i][0]; //cardMatrix[i][0]; // number of cards. 
        int pointsP1 = cardMatrix[i][1]; //AKA points left.
        int pointsP2 = cardMatrix[i][2]; //handled as points left
        bool swapped = false;
        if(pointsP1 > pointsP2){
            swapped = true;
            int temp = pointsP1;
            pointsP1 = pointsP2;
            pointsP2 = temp;
        }
        int totalPoints = pointsP1 + pointsP2;
        if(pointsP1 + pointsP2 > range){
            std::cout << "NO" << endl;
            break;
        }
        for(int m = 0; m < range; m++){
            if(pointsP1 == 0 && pointsP2 == 0){
                if(m == 0){
                    std::cout << "YES" << endl;
                    for(int l = 0; l < range; l++){
                        std::cout << l + 1<< " ";
                    }
                    std::cout << "\n";
                    for(int l = 0; l < range; l++){
                        std::cout << l + 1 << " ";
                    }
                    std::cout << "\n";
                    break;
                }
                if(ListContainsInt(intBlackListArrP2, m) || ListContainsInt(intBlackListArrP1, m)){
                        std::cout << "NO" << endl;
                        break;
                }else if (!ListContainsInt(intBlackListArrP2, m) && !ListContainsInt(intBlackListArrP1, m)){
                        if(m == range - 1){
                            intBlackListArrP1.push_front(m);
                            intBlackListArrP2.push_front(m);
                            std::cout << "YES" << endl;
                            for(int l : swapped?intBlackListArrP1:intBlackListArrP2)
                                std::cout << l + 1 << " ";
                            std::cout << "\n";
                            for(int l : swapped?intBlackListArrP2:intBlackListArrP1)
                                std::cout << l + 1 << " ";
                            std::cout << "\n";
                            break;
                        }else{
                            intBlackListArrP1.push_front(m);
                            intBlackListArrP2.push_front(m);
                        }
                }else {
                    std::cout << "NO" << endl;
                    break;
                }
            }
            if(pointsP2 >= pointsP1 && pointsP2 > 0){
                //P2 > P1.
                bool found = false;
                for(int j = 0; j < range; j++){
                    if(found)
                        break;
                    if(!ListContainsInt(intBlackListArrP2, j)){
                        for(int k = j + 1; k < range /*check if - pointsp1 works.*/; k++){
                            if(!ListContainsInt(intBlackListArrP1, k)){
                                intBlackListArrP1.push_front(k); //finds the first option that is bigger than k.
                                intBlackListArrP2.push_front(j);
                                pointsP2--;
                                found = true;
                                break;
                            }
                        }
                    }
                }if(found && m == range - 1){
                    std::cout << "YES" << endl;
                    for(int l : swapped?intBlackListArrP1:intBlackListArrP2)
                        std::cout << l + 1 << " ";
                    std::cout << "\n";
                    for(int l : swapped?intBlackListArrP2:intBlackListArrP1)
                        std::cout << l + 1 << " ";
                    std::cout << "\n";
                    break;
                }
            }
            else if(pointsP1 > pointsP2 && pointsP1 > 0){
                //P1 > P2.
                bool found = false;
                for(int j = 0; j < range; j++){
                    if(found)
                        break;
                    if(!ListContainsInt(intBlackListArrP1, j)){
                        for(int k = j + 1; k < range; k++){
                            if(!ListContainsInt(intBlackListArrP2, k)){
                                pointsP1--;
                                intBlackListArrP2.push_front(k);
                                intBlackListArrP1.push_front(j);
                                found = true;
                                break;
                            }
                        }
                    }
                }if(found && m == range - 1){
                    std::cout << "YES" << endl;
                    for(int l : swapped?intBlackListArrP1:intBlackListArrP2)
                        std::cout << l + 1 << " ";
                    std::cout << "\n";
                    for(int l : swapped?intBlackListArrP2:intBlackListArrP1)
                        std::cout << l + 1 << " ";
                    std::cout << "\n";
                    break;
                }
            }
        }
    }
}

Test details

Test 1

Group: 1, 2, 3

Verdict:

input
54
4 4 0
3 1 3
3 2 2
4 0 4
...

correct output
NO
NO
NO
NO
NO
...

user output
NO

Test 2

Group: 2, 3

Verdict:

input
284
6 1 0
5 0 2
7 1 5
7 7 5
...

correct output
NO
NO
YES
1 2 3 4 5 6 7 
2 3 4 5 6 1 7 
...

user output
NO
NO
YES
7 6 5 4 3 2 1 
7 1 6 5 4 3 2 
...

Test 3

Group: 3

Verdict:

input
955
14 2 10
12 2 5
10 4 9
14 1 13
...

correct output
YES
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
YES
14 13 12 11 10 9 8 7 6 5 4 3 2...

Test 4

Group: 3

Verdict:

input
869
17 12 9
16 8 4
15 9 9
17 11 15
...

correct output
NO
YES
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
NO

Test 5

Group: 3

Verdict:

input
761
18 3 15
19 1 15
18 8 1
19 19 17
...

correct output
YES
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
YES
18 17 16 15 14 13 12 11 10 9 8...

Test 6

Group: 3

Verdict:

input
925
21 14 21
20 18 18
20 7 6
21 14 9
...

correct output
NO
NO
YES
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
NO

Test 7

Group: 3

Verdict:

input
529
22 3 3
22 17 5
22 6 15
22 22 20
...

correct output
YES
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
YES
22 21 20 19 18 17 16 15 14 13 ...

Test 8

Group: 3

Verdict:

input
576
23 18 9
23 16 8
23 16 13
23 16 22
...

correct output
NO
NO
NO
NO
NO
...

user output
NO

Test 9

Group: 3

Verdict:

input
625
24 2 22
24 15 21
24 6 3
24 21 1
...

correct output
YES
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
YES
24 23 22 21 20 19 18 17 16 15 ...

Test 10

Group: 3

Verdict:

input
676
25 16 25
25 15 2
25 15 7
25 15 16
...

correct output
NO
YES
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
NO

Test 11

Group: 3

Verdict:

input
729
26 2 18
26 14 18
26 5 18
26 19 13
...

correct output
YES
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
YES
26 25 24 23 22 21 20 19 18 17 ...

Test 12

Group: 3

Verdict:

input
784
27 26 7
27 14 0
27 14 5
27 14 14
...

correct output
NO
NO
YES
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
NO

Test 13

Group: 3

Verdict:

input
841
28 26 16
28 13 19
28 5 8
28 26 4
...

correct output
NO
NO
YES
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
NO

Test 14

Group: 3

Verdict:

input
900
29 24 15
29 13 2
29 13 7
29 13 16
...

correct output
NO
YES
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
NO

Test 15

Group: 3

Verdict:

input
961
30 24 26
30 12 24
30 4 29
30 24 14
...

correct output
NO
NO
NO
NO
YES
...

user output
NO

Test 16

Group: 3

Verdict:

input
1000
15 12 6
33 18 30
44 4 26
6 6 5
...

correct output
NO
NO
YES
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
NO

Test 17

Group: 3

Verdict:

input
1000
45 32 30
4 0 3
46 23 10
71 19 46
...

correct output
NO
NO
YES
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
NO

Test 18

Group: 3

Verdict:

input
1000
51 29 37
75 11 72
5 2 4
31 8 26
...

correct output
NO
NO
NO
NO
YES
...

user output
NO

Test 19

Group: 3

Verdict:

input
1000
50 20 37
99 45 58
86 79 73
85 70 54
...

correct output
NO
NO
NO
NO
NO
...

user output
NO

Test 20

Group: 3

Verdict:

input
1000
26 23 5
73 53 59
64 47 41
80 75 55
...

correct output
NO
NO
NO
NO
NO
...

user output
NO