답안 #277359

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
277359 2020-08-21T04:54:43 Z 문홍윤(#5120) Travelling Salesperson (CCO20_day2problem1) C++17
0 / 25
1 ms 416 KB
#include <bits/stdc++.h>
#define eb emplace_back
#define mp make_pair
#define F first
#define S second
#define all(x) x.begin(), x.end()
#define svec(x) sort(x.begin(), x.end())
#define press(x) x.erase(unique(x.begin(), x.end()), x.end())
using namespace std;
typedef long long LL;
typedef pair<int, int> pii;
typedef pair<LL, LL> pll;
typedef pair<int, LL> pil;
typedef pair<LL, int> pli;
const LL llinf=2e18;
const int inf=1e9;

char str[2010][2010];
int n;

void solve(int st){
    vector<int> r, b;
    r.eb(st); b.eb(st);
    for(int i=1; i<=n; i++){
        if(i==st)continue;
        int ch=r.back();
        if(str[ch][i]=='R'){
            b.pop_back();
            if(!b.size()){
                r.eb(i);
                b.eb(i);
            }
            else{
                if(str[ch][b.back()]=='B'){
                    r.eb(i);
                    b.eb(i);
                }
                else{
                    r.eb(i);
                    r.eb(b.back());
                }
            }
        }
        else{
            r.pop_back();
            if(!r.size()){
                r.eb(i);
                b.eb(i);
            }
            else{
                if(str[ch][r.back()]=='R'){
                    r.eb(i);
                    b.eb(i);
                }
                else{
                    b.eb(i);
                    b.eb(r.back());
                }
            }
        }
    }
    printf("%d\n", n);
    assert(r[0]==st||b[0]==st);
    if(r[0]==st){
        b.pop_back();
        reverse(all(b));
        for(auto i:r)printf("%d ", i);
        for(auto i:b)printf("%d ", i);
    }
    else{
        r.pop_back();
        reverse(all(r));
        for(auto i:b)printf("%d ", i);
        for(auto i:r)printf("%d ", i);
    }
    puts("");
}

int main(){
    scanf("%d", &n);
    for(int i=2; i<=n; i++)scanf("%s", str[i]+1);
    for(int i=2; i<=n; i++){
        for(int j=1; j<i; j++)str[j][i]=str[i][j];
    }
    for(int i=1; i<=n; i++)solve(i);
}

Compilation message

Main.cpp: In function 'int main()':
Main.cpp:80:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   80 |     scanf("%d", &n);
      |     ~~~~~^~~~~~~~~~
Main.cpp:81:33: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   81 |     for(int i=2; i<=n; i++)scanf("%s", str[i]+1);
      |                            ~~~~~^~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 256 KB Output is correct
2 Correct 0 ms 384 KB Output is correct
3 Correct 1 ms 256 KB Output is correct
4 Correct 1 ms 256 KB Output is correct
5 Correct 0 ms 256 KB Output is correct
6 Correct 1 ms 256 KB Output is correct
7 Correct 1 ms 384 KB Output is correct
8 Incorrect 1 ms 416 KB Output isn't correct
9 Halted 0 ms 0 KB -