답안 #277403

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
277403 2020-08-21T05:04:27 Z 문홍윤(#5120) Travelling Salesperson (CCO20_day2problem1) C++17
0 / 25
1 ms 512 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(int i=0; i<r.size()-1; i++)assert(str[r[i]][r[i+1]]=='R');
        for(int i=0; i<b.size()-1; i++)assert(str[b[i]][b[i+1]]=='B');
        for(auto i:r)printf("%d ", i);
        for(auto i:b)printf("%d ", i);
    }
    else{
        r.pop_back();
        reverse(all(r));
        for(int i=0; i<b.size()-1; i++)assert(str[b[i]][b[i+1]]=='B');
        for(int i=0; i<r.size()-1; i++)assert(str[r[i]][r[i+1]]=='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);
    if(n==2)return !printf("2\n1 2\n2\n2 1");
    if(n==3)return !printf("3\n1 2 3\n3\n2 3 1\n3\n3 1 2");
    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 'void solve(int)':
Main.cpp:67:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   67 |         for(int i=0; i<r.size()-1; i++)assert(str[r[i]][r[i+1]]=='R');
      |                      ~^~~~~~~~~~~
Main.cpp:68:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   68 |         for(int i=0; i<b.size()-1; i++)assert(str[b[i]][b[i+1]]=='B');
      |                      ~^~~~~~~~~~~
Main.cpp:75:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   75 |         for(int i=0; i<b.size()-1; i++)assert(str[b[i]][b[i+1]]=='B');
      |                      ~^~~~~~~~~~~
Main.cpp:76:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   76 |         for(int i=0; i<r.size()-1; i++)assert(str[r[i]][r[i+1]]=='R');
      |                      ~^~~~~~~~~~~
Main.cpp: In function 'int main()':
Main.cpp:84:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   84 |     scanf("%d", &n);
      |     ~~~~~^~~~~~~~~~
Main.cpp:85:33: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   85 |     for(int i=2; i<=n; i++)scanf("%s", str[i]+1);
      |                            ~~~~~^~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1 ms 512 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -