답안 #395283

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
395283 2021-04-28T05:44:10 Z Andyvanh1 Type Printer (IOI08_printer) C++14
70 / 100
183 ms 31960 KB
#include <iostream>
#include <algorithm>
#include <vector>
#include <set>
#include <stack>
#include <queue>
#include <map>
#include <math.h>

using namespace std;

#define pb push_back
#define INF INT32_MAX
#define vt vector


typedef vt<int> vi;
typedef pair<int,int> pii;
typedef tuple<int,int,int> tiii;
typedef long long ll;


int n;


#define MOD  1000000007
vt<vi> adjlist(1);
vt<char> node(1);
vt<int> endd(1);
vt<int> par(1);
vt<int> depth(1);
int id;
int cur = 0;

void build(string str){
    int cur = 0;
    int at = 0;

    while(at!=str.length()){

        bool bol = false;
        for(auto& e: adjlist[cur]){
            if(e==par[cur])continue;
            if(node[e]==str[at]){
                at++;
                    cur = e;

                bol = true;
                break;
            }
        }
        if(!bol)break;

    }
    if(at==str.length()){
        endd[cur]++;
        return;
    }
    at--;
    while(at!=str.length()-1){
        adjlist.pb(vi(0));
        adjlist[cur].pb(id);
        adjlist[id].pb(cur);
        depth.pb(at+1);
        par.pb(cur);
        node.pb(str[at+1]);
        endd.pb(0);
        cur = id;
        at++;id++;

    }
    endd[id-1]++;
}
vt<bool> visited;
void dfs(int noder){
    cur++;
    visited[noder] = true;
    if(endd[noder]){
        for(int i = 0; i < endd[noder]; i++)
        cout<<"P"<<'\n';
    }
for(auto& e: adjlist[noder]){
    if(!visited[e]){
        cout<<string(1,node[e])<<'\n';
        dfs(e);
    }

}
if(cur!=adjlist.size()) {
    cout << "-" << '\n';
}
}

void solve2(){
    node[0] = 'A';
    endd[0] = 0;
    par[0] = -1;
    depth[0] = -1;
    string Maxstr;

    cin>>n;
    id = 1;
    int Max = 0;
    for(int i = 0; i < n; i++){
        string s;
        cin>>s;
        int x = s.length();
        if(x>Max){
            Max = x;
            Maxstr = s;
        }
        build(s);
    }

    for(int i = 0; i < adjlist.size(); i++){
        for(int j = 0; j < adjlist[i].size(); j++){
            if(node[adjlist[i][j]]==Maxstr[depth[adjlist[i][j]]]){
                swap(adjlist[i][j],adjlist[i][adjlist[i].size()-1]);
            }
        }
    }


    visited.resize(adjlist.size());
    for(int i = 0; i < adjlist.size(); i++){
        visited[i] = false;
    }
    cout<<2*adjlist.size()+n-Max-2<<'\n';
    dfs(0);





}


int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    int tc = 1;
    //cin>>tc;

    solve2();




    return 0;
}

Compilation message

printer.cpp: In function 'void build(std::string)':
printer.cpp:39:13: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   39 |     while(at!=str.length()){
      |           ~~^~~~~~~~~~~~~~
printer.cpp:55:10: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   55 |     if(at==str.length()){
      |        ~~^~~~~~~~~~~~~~
printer.cpp:60:13: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   60 |     while(at!=str.length()-1){
      |           ~~^~~~~~~~~~~~~~~~
printer.cpp: In function 'void dfs(int)':
printer.cpp:89:7: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   89 | if(cur!=adjlist.size()) {
      |    ~~~^~~~~~~~~~~~~~~~
printer.cpp: In function 'void solve2()':
printer.cpp:115:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  115 |     for(int i = 0; i < adjlist.size(); i++){
      |                    ~~^~~~~~~~~~~~~~~~
printer.cpp:116:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  116 |         for(int j = 0; j < adjlist[i].size(); j++){
      |                        ~~^~~~~~~~~~~~~~~~~~~
printer.cpp:125:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  125 |     for(int i = 0; i < adjlist.size(); i++){
      |                    ~~^~~~~~~~~~~~~~~~
printer.cpp: In function 'int main()':
printer.cpp:142:9: warning: unused variable 'tc' [-Wunused-variable]
  142 |     int tc = 1;
      |         ^~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 332 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 332 KB Output is correct
2 Correct 2 ms 588 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 4 ms 716 KB Expected EOF
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 9 ms 2052 KB Expected EOF
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 27 ms 4992 KB Output is correct
2 Correct 9 ms 1160 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 64 ms 12468 KB Output is correct
2 Correct 137 ms 26896 KB Output is correct
3 Correct 76 ms 14344 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 53 ms 9328 KB Output is correct
2 Correct 183 ms 31960 KB Output is correct
3 Correct 85 ms 16244 KB Output is correct
4 Incorrect 135 ms 30596 KB Expected EOF