Submission #1013644

# Submission time Handle Problem Language Result Execution time Memory
1013644 2024-07-03T18:14:38 Z amine_aroua Netrpeljivost (COI23_netrpeljivost) C++17
10 / 100
1500 ms 1104 KB
#include<bits/stdc++.h>
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("avx2")
#include<ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;
using namespace std;
#define intt long long
#define pb push_back
vector<vector<int>> mat;
int n ;
const intt INF = 1e18;
struct hashPi {
    size_t operator()(const pair<int,int> &p) const { return p.first ^ p.second; }
};
vector<unordered_map<pair<int ,int> , intt , hashPi>> dp;
intt solve(int node ,int fr , int bk ,int l , int r)
{
    if(dp[node].find({fr , bk}) != dp[node].end())
        return dp[node][{fr , bk}];
    if(l + 1 == r)
    {
        return mat[fr][bk];
    }
    int m = (l + r)/2;
    intt ans = INF;
    if(l <= fr && fr <= m && m + 1 <= bk && bk <= r)
    {
        int L1 = l , R1 = (m + l)/2;
        int L2 = m + 1 , R2 = (m + 1 + r)/2;
        if(L1 <= fr&& fr <= R1 )
        {
            L1 = R1 + 1;
            R1 = m;
        }
        if(L2 <= bk && bk <= R2)
        {
            L2 = R2 + 1;
            R2 = r;
        }
        for(int v1 = L1 ; v1 <= R1 ;v1++)
        {
            for(int v2 = L2; v2 <= R2 ; v2++)
            {
                ans = min(ans , solve(2*node , fr , v1 , l , m) + solve(2*node + 1 , v2 , bk , m + 1 , r) + mat[v1][v2]);
            }
        }
    }
    else if(l <= bk && bk <= m && m + 1 <= fr && fr <= r)
    {
        int L1 = l , R1 = (m + l)/2;
        int L2 = m + 1 , R2 = (m + 1 + r)/2;
        if(L1 <= bk&& bk <= R1 )
        {
            L1 = R1 + 1;
            R1 = m;
        }
        if(L2 <= fr && fr <= R2)
        {
            L2 = R2 + 1;
            R2 = r;
        }
        for(int v1 = L1 ; v1 <= R1 ; v1++)
        {
            if(v1 == bk)
                continue;
            for(int v2 = L2 ; v2 <= R2 ; v2++)
            {
                if(v2 == fr)
                    continue;
                ans = min(ans , solve(2*node , v1 , bk , l , m) + solve(2*node + 1 , fr , v2 , m + 1 , r) + mat[v1][v2]);
            }
        }
    }
    return dp[node][{fr , bk}] = ans;
}
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin>>n;
    mat = vector<vector<int>> (n , vector<int>(n));
    for(int i = 0 ; i < n ; i++)
    {
        for(int j = 0 ; j < n ; j++)
        {
            cin>>mat[i][j];
        }
    }
    if(n == 1)
    {
        cout<<0<<'\n';
        return 0;
    }
    dp.assign(2*n , unordered_map<pair<int ,int> , intt , hashPi>());
    intt ans = INF;
    int l = 0 , r = n - 1;
    int m = (l  + r)/2;
    for(int fr = l ; fr <= m ; fr++)
    {
        for(int bk = m + 1 ; bk <= r ; bk++)
        {
            ans = min({ans , solve(1 , fr , bk , l , r) , solve(1 , bk , fr , l , r)});
        }
    }
    cout<<ans<<'\n';
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 344 KB Output is correct
2 Correct 1 ms 344 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 1 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 1 ms 344 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 0 ms 348 KB Output is correct
10 Correct 1 ms 348 KB Output is correct
11 Correct 0 ms 348 KB Output is correct
12 Correct 0 ms 348 KB Output is correct
13 Correct 0 ms 348 KB Output is correct
14 Correct 0 ms 348 KB Output is correct
15 Correct 0 ms 348 KB Output is correct
16 Correct 0 ms 348 KB Output is correct
17 Correct 0 ms 348 KB Output is correct
18 Correct 1 ms 344 KB Output is correct
19 Correct 1 ms 348 KB Output is correct
20 Correct 1 ms 348 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 344 KB Output is correct
2 Correct 1 ms 344 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 1 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 1 ms 344 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 0 ms 348 KB Output is correct
10 Correct 1 ms 348 KB Output is correct
11 Correct 0 ms 348 KB Output is correct
12 Correct 0 ms 348 KB Output is correct
13 Correct 0 ms 348 KB Output is correct
14 Correct 0 ms 348 KB Output is correct
15 Correct 0 ms 348 KB Output is correct
16 Correct 0 ms 348 KB Output is correct
17 Correct 0 ms 348 KB Output is correct
18 Correct 1 ms 344 KB Output is correct
19 Correct 1 ms 348 KB Output is correct
20 Correct 1 ms 348 KB Output is correct
21 Execution timed out 1530 ms 1104 KB Time limit exceeded
22 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 344 KB Output is correct
2 Correct 1 ms 344 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 1 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 1 ms 344 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 0 ms 348 KB Output is correct
10 Correct 1 ms 348 KB Output is correct
11 Correct 0 ms 348 KB Output is correct
12 Correct 0 ms 348 KB Output is correct
13 Correct 0 ms 348 KB Output is correct
14 Correct 0 ms 348 KB Output is correct
15 Correct 0 ms 348 KB Output is correct
16 Correct 0 ms 348 KB Output is correct
17 Correct 0 ms 348 KB Output is correct
18 Correct 1 ms 344 KB Output is correct
19 Correct 1 ms 348 KB Output is correct
20 Correct 1 ms 348 KB Output is correct
21 Execution timed out 1530 ms 1104 KB Time limit exceeded
22 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 344 KB Output is correct
2 Correct 1 ms 344 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 1 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 1 ms 344 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 0 ms 348 KB Output is correct
10 Correct 1 ms 348 KB Output is correct
11 Correct 0 ms 348 KB Output is correct
12 Correct 0 ms 348 KB Output is correct
13 Correct 0 ms 348 KB Output is correct
14 Correct 0 ms 348 KB Output is correct
15 Correct 0 ms 348 KB Output is correct
16 Correct 0 ms 348 KB Output is correct
17 Correct 0 ms 348 KB Output is correct
18 Correct 1 ms 344 KB Output is correct
19 Correct 1 ms 348 KB Output is correct
20 Correct 1 ms 348 KB Output is correct
21 Execution timed out 1530 ms 1104 KB Time limit exceeded
22 Halted 0 ms 0 KB -