Submission #857961

# Submission time Handle Problem Language Result Execution time Memory
857961 2023-10-07T08:09:35 Z danikoynov Newspapers (CEOI21_newspapers) C++14
8 / 100
1 ms 4444 KB
#include<bits/stdc++.h>
#define endl '\n'

using namespace std;
typedef long long ll;

void speed()
{
    ios_base::sync_with_stdio(NULL);
    cin.tie(NULL);
    cout.tie(NULL);
}

const int maxn = 1010;

int n, m;
void solve_chain()
{
  if (n == 1)
    {
        cout << "YES" << endl;
        cout << 1 << endl;
        cout << 1 << endl;
        return;
    }
    if (n == 2)
    {
        cout << "YES" << endl;
        cout << 2 << endl;
        cout << 1 << " " << 1 << endl;
        return;
    }
    cout << "YES" << endl;
    cout << (n - 2) * 2 << endl;
    for (int i = 2; i < n; i ++)
        cout << i << " ";
    for (int i = n - 1; i > 1; i --)
        cout << i << " ";
    cout << endl;
}

vector < int > adj[maxn];

const int maxmask = (1 << 21);
int dp[maxmask], from[maxmask], last[maxmask];

int transition_mask(int mask, int ver)
{
    int new_mask = 0;
    if ((mask & (1 << (ver - 1))) > 0)
        mask -= (1 << (ver - 1));

    for (int v = 1; v <= n; v ++)
    {
        if ((mask & (1 << (v - 1))) == 0)
            continue;

        for (int u : adj[v])
            new_mask |= (1 << (u - 1));
    }

    return new_mask;
}
void solve()
{
    cin >> n >> m;
    for (int i = 1; i <= m; i ++)
    {
        int v, u;
        ///cin >> v >> u;
        v = i;
        u = i + 1;
        adj[v].push_back(u);
        adj[u].push_back(v);
    }
    if (n > 20)
    {
        solve_chain();
        return;
    }

    int base_mask = (1 << n) - 1;

    for (int mask = 0; mask < (1 << n); mask ++)
        dp[mask] = -1;

    dp[base_mask] = 0;
    queue < int > q;
    q.push(base_mask);
    while(!q.empty())
    {
        int mask = q.front();
        q.pop();

        for (int i = 0; i < n; i ++)
        {
            int next_mask = transition_mask(mask, i + 1);
            if (dp[next_mask] == -1)
            {
                dp[next_mask] = dp[mask] + 1;
                from[next_mask] = i + 1;
                last[next_mask] = mask;
                q.push(next_mask);
            }
        }
    }

    if (dp[0] == -1)
    {
        cout << "NO" << endl;
        return;
    }

    vector < int > ord;
    int cur = 0;
    while(cur != base_mask)
    {
        ///cout << "step " << cur << " " << from[cur] << endl;
        ord.push_back(from[cur]);
        cur = last[cur];
    }

    reverse(ord.begin(), ord.end());
    cout << "YES" << endl;
    cout << ord.size() << endl;
    for (int cur : ord)
        cout << cur << " ";
    cout << endl;



}
int main()
{
    solve();
    return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 4444 KB Output is correct
2 Correct 1 ms 4444 KB Output is correct
3 Correct 1 ms 4444 KB Output is correct
4 Correct 1 ms 4444 KB Output is correct
5 Partially correct 1 ms 4444 KB Failed to provide a successful strategy.
6 Partially correct 1 ms 4444 KB Failed to provide a successful strategy.
7 Correct 1 ms 2396 KB Output is correct
8 Partially correct 1 ms 4444 KB Failed to provide a successful strategy.
9 Incorrect 1 ms 4444 KB Output isn't correct
10 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 4444 KB Output is correct
2 Correct 1 ms 4444 KB Output is correct
3 Correct 1 ms 4444 KB Output is correct
4 Correct 1 ms 4444 KB Output is correct
5 Correct 1 ms 4444 KB Output is correct
6 Correct 1 ms 4444 KB Output is correct
7 Correct 1 ms 4444 KB Output is correct
8 Correct 1 ms 4440 KB Output is correct
9 Correct 1 ms 4444 KB Output is correct
10 Correct 1 ms 4444 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 344 KB Output is correct
16 Correct 0 ms 348 KB Output is correct
17 Correct 1 ms 348 KB Output is correct
18 Correct 0 ms 600 KB Output is correct
19 Correct 0 ms 348 KB Output is correct
20 Correct 1 ms 464 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 4444 KB Output is correct
2 Correct 1 ms 4444 KB Output is correct
3 Correct 1 ms 4444 KB Output is correct
4 Correct 1 ms 4444 KB Output is correct
5 Partially correct 1 ms 4444 KB Failed to provide a successful strategy.
6 Partially correct 1 ms 4444 KB Failed to provide a successful strategy.
7 Correct 1 ms 2396 KB Output is correct
8 Partially correct 1 ms 4444 KB Failed to provide a successful strategy.
9 Incorrect 1 ms 4444 KB Output isn't correct
10 Halted 0 ms 0 KB -