답안 #867049

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
867049 2023-10-27T15:28:17 Z vjudge1 Monster Game (JOI21_monster) C++17
컴파일 오류
0 ms 0 KB
#include <bits/stdc++.h>
#include "monster.h"
using namespace std;

/*vector<int> a;
int querycount=0;

bool Query(int x, int y)
{
    //cout << "? " << x << " " << y << '\n';
    bool win=false;
    if (a[x]-a[y]>1 || a[y]-a[x]==1)
        win=true;
    querycount=querycount+1;
    //cout << win << '\n';

    return win;
}*/

bool compare(int x, int y)
{
    return !Query(x, y);
}

int firstelement(int x, int n)
{
    int win=0;
    for (int i=0; i<n; i++)
    {
        if (i==x)
            continue;
        win=win+Query(x, i);
    }
    if (win<2)
        return 0;

    return 1;
}

int bigfirstelement(int x, int n)
{
    int win=0;
    for (int i=0; i<n; i++)
    {
        if (i==x)
            continue;
        win=win+Query(x, i);
    }
    if (win==n-2)
        return n-1;

    return n-2;
}

vector<int> Solve(int n)
{
    int order[n];
    for (int i=0; i<n; i++)
        order[i]=i;
    sort(order, order+n, compare);
    vector<int> win;
    for (int i=1; i<n; i++)
        if (Query(order[0], order[i]))
            win.push_back(i);
    int current;
    if (win.size()<2)
        current=firstelement(order[win[0]], n);
    else if (win.size()==n-2)
        current=bigfirstelement(order[1], n);
    else
        current=win[win.size()-2];
    vector<int> strength;
    int last=-1, check=0, x=current;
    while (x>last)
    {
        strength.push_back(x);
        x=x-1;
    }
    while (strength.size()<n)
    {
        for (int i=strength.size(); i<n; i++)
            if (Query(order[check], order[i]))
            {
                check=strength.size();
                last=current;
                current=current+(i-strength.size()+1);
                break;
            }
        x=current;
        while (x>last)
        {
            strength.push_back(x);
            x=x-1;
        }
    }
    vector<int> finalstrength(n);
    for (int i=0; i<n; i++)
        finalstrength[order[i]]=strength[i];

    return finalstrength;
}

/*int main()
{
    /*a={0, 1, 2, 3};
    for (auto x : a)
        cout << x << " ";
    cout << '\n';*/
    ifstream fin("C:/Users/sofij/OneDrive/Desktop/cross.txt");
    int n;
    fin >> n;
    for (int i=0; i<n; i++)
    {
        int ai;
        fin >> ai;
        a.push_back(ai);
    }
    vector<int> t=Solve(n);
    for (auto x : t)
        cout << x << " ";
    cout << '\n';
    cout << "query count " << querycount << '\n';

    return 0;
}*/



/*#include <bits/stdc++.h>
#include "monster.h"
using namespace std;

vector<int> a;

bool Query(int x, int y)
{
    cout << "? " << x << " " << y << '\n';
    bool win=false;
    if (a[x]-a[y]>1 || a[y]-a[x]==1)
        win=true;
    cout << win << '\n';

    return win;
}

vector<int> Solve(int n)
{
    int wins[n]={0};
    bool outcome[n][n];
    vector<int> strength(n);
    for (int i=0; i<n; i++)
        for (int j=i+1; j<n; j++)
        {
            outcome[i][j]=Query(i, j);
            if (outcome[i][j]==true)
                wins[i]=wins[i]+1;
            else
                wins[j]=wins[j]+1;
        }
    cout << "wins\n";
    for (int i=0; i<n; i++)
        cout << wins[i] << " ";
    cout << '\n';
    for (int i=0; i<n; i++)
        strength[i]=wins[i];
    for (int i=0; i<n; i++)
        for (int j=i+1; j<n; j++)
        {
            if (wins[i]==n-2 && wins[j]==n-2)
            {
                strength[i]=n-1;
                strength[j]=n-2;
                if (outcome[i][j]==true)
                    swap(strength[i], strength[j]);

            }
            if (wins[i]==1 && wins[j]==1)
            {
                strength[i]=1;
                strength[j]=0;
                if (outcome[i][j]==true)
                    swap(strength[i], strength[j]);

            }
        }

    return strength;
}

int main()
{
    a={3, 1, 4, 2, 0};
    vector<int> t=Solve(5);
    for (auto x : t)
        cout << x << " ";

    return 0;
}*/

Compilation message

monster.cpp:105:5: warning: "/*" within comment [-Wcomment]
  105 |     /*a={0, 1, 2, 3};
      |      
monster.cpp: In function 'std::vector<int> Solve(int)':
monster.cpp:68:24: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   68 |     else if (win.size()==n-2)
      |              ~~~~~~~~~~^~~~~
monster.cpp:79:27: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   79 |     while (strength.size()<n)
      |            ~~~~~~~~~~~~~~~^~
monster.cpp: At global scope:
monster.cpp:111:5: error: 'fin' does not name a type
  111 |     fin >> n;
      |     ^~~
monster.cpp:112:5: error: expected unqualified-id before 'for'
  112 |     for (int i=0; i<n; i++)
      |     ^~~
monster.cpp:112:19: error: 'i' does not name a type
  112 |     for (int i=0; i<n; i++)
      |                   ^
monster.cpp:112:24: error: 'i' does not name a type
  112 |     for (int i=0; i<n; i++)
      |                        ^
monster.cpp:119:5: error: expected unqualified-id before 'for'
  119 |     for (auto x : t)
      |     ^~~
monster.cpp:121:5: error: 'cout' does not name a type
  121 |     cout << '\n';
      |     ^~~~
monster.cpp:122:5: error: 'cout' does not name a type
  122 |     cout << "query count " << querycount << '\n';
      |     ^~~~
monster.cpp:124:5: error: expected unqualified-id before 'return'
  124 |     return 0;
      |     ^~~~~~
monster.cpp:125:1: error: expected declaration before '}' token
  125 | }*/
      | ^
monster.cpp:125:3: error: expected unqualified-id before '/' token
  125 | }*/
      |   ^