Submission #277384

# Submission time Handle Problem Language Result Execution time Memory
277384 2020-08-21T04:59:48 Z 문홍윤(#5120) Travelling Salesperson (CCO20_day2problem1) C++17
0 / 25
1 ms 256 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));
        assert(r.size()+b.size()==n);
        for(auto i:r)printf("%d ", i);
        for(auto i:b)printf("%d ", i);
    }
    else{
        r.pop_back();
        reverse(all(r));
        assert(r.size()+b.size()==n);
        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 1");
    if(n==3)return !printf("2\n1 2 3\n2 3 1\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

In file included from /usr/include/c++/9/cassert:44,
                 from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:33,
                 from Main.cpp:1:
Main.cpp: In function 'void solve(int)':
Main.cpp:67:33: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   67 |         assert(r.size()+b.size()==n);
      |                ~~~~~~~~~~~~~~~~~^~~
Main.cpp:74:33: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   74 |         assert(r.size()+b.size()==n);
      |                ~~~~~~~~~~~~~~~~~^~~
Main.cpp: In function 'int main()':
Main.cpp:82:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   82 |     scanf("%d", &n);
      |     ~~~~~^~~~~~~~~~
Main.cpp:83:33: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   83 |     for(int i=2; i<=n; i++)scanf("%s", str[i]+1);
      |                            ~~~~~^~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 0 ms 256 KB Output is correct
2 Correct 1 ms 256 KB Output is correct
3 Incorrect 1 ms 256 KB Output isn't correct
4 Halted 0 ms 0 KB -