CSES - Datatähti 2023 alku - Results
Submission details
Task:Lista
Sender:Mahtimursu
Submission time:2022-10-31 02:54:23 +0200
Language:C++17
Status:READY
Result:0
Feedback
groupverdictscore
#10
Test results
testverdicttimescore
#10.00 s0details

Code

#include <bits/stdc++.h>

typedef long long ll;

#define M 1000000007
#define N (1 << 18)

using namespace std;

int itv[100];
int v[2023];
int n = 100;

int calc_ans() {
    int ans = 0;
    // #pragma omp parallel for
    for (int intv = 0; intv < 100; ++intv) {
        int sm = 0;
        for (int i = intv * 20; i < intv * 20 + 43; ++i) {
            sm += v[i];
        }   
        ans += sm == itv[intv];
    }

    return ans;
}

ll dif() {
    ll ans = 0;
    // #pragma omp parallel for
    for (int intv = 0; intv < 100; ++intv) {
        int sm = 0;
        for (int i = intv * 20; i < intv * 20 + 43; ++i) {
            sm += v[i];
        }   
        ans += abs(sm - itv[intv]);
    }

    return ans;
}

void print(int cans, int seed) {
    /*cout << "ANS FOR " << cans << "\n";
    for (int i = 0; i < 2023; ++i) {
        cout << v[i] << " ";
    }
    cout << "\n------------" << endl;*/
    ofstream outfile;
    outfile.open("tulos-" + to_string(seed) + ".txt");
    for (int i = 0; i < 2023; ++i) {
        outfile << v[i] << " ";
    }
    outfile.close();
}

void brute(int seed) {
    cout << "Starting seed: " << seed << endl;
    int limit = 2e9;

    srand(seed);

    int run = 0;

    ll cd = dif();
    ll ans = calc_ans();

    cout << "Current best: " << ans << endl;

    while (run++ <= limit) {
        int a = rand() % 2023;
        int b = rand() % 2023;
        int c = rand() % 2023;
        int d = rand() % 2023;

        swap(v[a], v[b]);
        //swap(v[c], v[d]);

        ll nd = dif();

        if (nd < cd) {
            cd = nd;
            ll nans = calc_ans();

            cout << "IMPR " << cd << endl;

            if (ans < nans) {
                ans = nans;
                cout << "Current best: " << ans << endl;

                print(ans, seed);
            }
        } else {
            swap(v[a], v[b]);
            //swap(v[c], v[d]);
        }        
    } 
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    
    for (int i = 0; i < n; ++i) {
        cin >> itv[i];
    }

    ifstream infile("tulos-21.txt");


    for (int i = 0; i < 2023; ++i) {
        infile >> v[i];
    }

    infile.close();

    brute(2001);


    /*for (int seed = 21; seed <= 30; ++seed) {
        for (int i = 0; i < 2023; ++i) {
            v[i] = i + 1;
        }
        brute(seed);
    }*/



    return 0;
}

Test details

Test 1

Verdict:

input
58667 68283 64141 69169 67564 ...

correct output
688 488 1060 602 1171 471 322 ...

user output
#include <bits/stdc++.h>

typedef long long ll;

#define M 1000000007
...