Submission details
Task:Hamilton
Sender:RKondratavicius
Submission time:2026-04-17 13:19:46 +0300
Language:C++ (C++20)
Status:READY
Result:12
Feedback
subtaskverdictscore
#1ACCEPTED5
#2ACCEPTED7
#30
#40
Test results
testverdicttimescoresubtask
#1ACCEPTED0.01 s100details
#2ACCEPTED0.04 s1001details
#3ACCEPTED6.66 s02, 3details
#40.32 s04details

Code

#include <bits/stdc++.h>

using namespace std;

int main()
{
    int n, t;
    cin >> n >> t;
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<n; j++)
        {
            if(((j > i) && (j!=n-1 || i!=0)) || (i==n-1 && j == 0))
                cout << "1 ";
            else cout << "0 ";
        }
        cout << endl;
    }
    while(t--)
    {
        bool kaip[n][n];
        for(int i=0; i<n; i++)
        {
            for(int j=i+1; j<n; j++)
            {
                cout << "? " << i+1 << ' ' << j+1 << endl;
                char kas;
                cin >> kas;
                if(kas == '<') kaip[i][j] = 1; /// 1 - pirmas didesnis
                else kaip[i][j] = 0; /// 0 - antras didesnis
            }
        }
        int kiek[n];
        fill(kiek, kiek+n, 0);
        for(int i=0; i<n; i++)
        {
            for(int j=i+1; j<n; j++)
            {
                if(kaip[i][j])
                {
                    kiek[i]++;
                }
                else
                {
                    kiek[j]++;
                }
            }
        }
        int vienas[2] = {-1, -1}, bevieno[2] = {-1, -1};
        for(int i=0; i<n; i++)
        {
            if(kiek[i]==1)
            {
                if(vienas[0]==-1)
                    vienas[0] = i;
                else vienas[1] = i;
            }
            if(kiek[i]==n-2)
            {
                if(bevieno[0]==-1)
                    bevieno[0] = i;
                else bevieno[1] = i;
            }
        }
        int tvarka[n];
        if(kaip[vienas[0]][vienas[1]]) /// kelias is antro i pirma
        {
            tvarka[0] = vienas[1];
            tvarka[1] = vienas[0];
        }
        else
        {
            tvarka[1] = vienas[1];
            tvarka[0] = vienas[0];
        }
        if(kaip[bevieno[0]][bevieno[1]]) /// kelias is antro i pirma
        {
            tvarka[n-1] = bevieno[0];
            tvarka[n-2] = bevieno[1];
        }
        else
        {
            tvarka[n-2] = bevieno[0];
            tvarka[n-1] = bevieno[1];
        }
        for(int i = 0; i<n; i++)
        {
            if(kiek[i]!=1 && kiek[i]!=n-2)
            {
                tvarka[kiek[i]] = i;
            }
        }
        cout << "! ";
        for(int i:tvarka) cout << i+1 << ' ';
        cout << endl;
    }
    return 0;
}

Test details

Test 1

Subtask:

Verdict: ACCEPTED

input
0 5 2 fixed 1 2 3 4 5 2 4 1 5 ...

correct output
(empty)

user output
Activating encoder mode
5 2
0 1 1 1 0 
0 0 1 1 1 
0 0 0 1 1 
...

Feedback: Q = 10.000000

Test 2

Subtask: 1

Verdict: ACCEPTED

input
01 4 200 rnd

correct output
(empty)

user output
Activating encoder mode
4 200
0 1 1 0 
0 0 1 1 
0 0 0 1 
...

Feedback: Q = 6.000000

Test 3

Subtask: 2, 3

Verdict: ACCEPTED

input
02 50 200 rnd

correct output
(empty)

user output
Activating encoder mode
50 200
0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

Feedback: Q = 1225.000000

Test 4

Subtask: 4

Verdict:

input
03 500 200 rnd

correct output
(empty)

user output
Activating encoder mode
500 200
0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

Feedback: Case #1: Too many queries