제출 #1118590

#제출 시각아이디문제언어결과실행 시간메모리
1118590anuj_anandType Printer (IOI08_printer)C++17
100 / 100
254 ms84936 KiB
#include<bits/stdc++.h> using namespace std; const int N=5e5+10; int trie[N][30]; bool word[N]; int cnt,sz[N],path[N]; stack<int> st; vector<int> adj[N]; char type[N]; vector<char> pt; void insert(string s){ int u=0; for(int i=0;i<s.size();i++){ if(trie[u][s[i]-'a']==0){ trie[u][s[i]-'a']=++cnt; type[cnt]=s[i]; adj[cnt].push_back(u); adj[u].push_back(cnt); } u=trie[u][s[i]-'a']; } word[u]=true; } void findsz(int u,int p){ sz[u]=0; for(int i=0;i<adj[u].size();i++){ int v=adj[u][i]; if(v==p) continue; findsz(v,u); if(sz[v]+1>sz[u]){ sz[u]=sz[v]+1; path[u]=v; } } } void dfs(int u,int p){ while(!st.empty() && st.top()!=p) pt.push_back('-'),st.pop(); if(u) st.push(u); if(u) pt.push_back(type[u]); if(word[u] && u) pt.push_back('P'); for(int i=0;i<adj[u].size();i++){ int v=adj[u][i]; if(v==p || v==path[u]) continue; dfs(v,u); } if(sz[u]) dfs(path[u],u); } int main(){ int n; cin>>n; for(int i=0;i<n;i++){ string inp; cin>>inp; insert(inp); } findsz(0,0); dfs(0,0); cout<<pt.size() <<"\n"; for(int i=0;i<pt.size();i++){ cout<<pt[i] <<"\n"; } }

컴파일 시 표준 에러 (stderr) 메시지

printer.cpp: In function 'void insert(std::string)':
printer.cpp:13:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   13 |     for(int i=0;i<s.size();i++){
      |                 ~^~~~~~~~~
printer.cpp: In function 'void findsz(int, int)':
printer.cpp:26:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   26 |     for(int i=0;i<adj[u].size();i++){
      |                 ~^~~~~~~~~~~~~~
printer.cpp: In function 'void dfs(int, int)':
printer.cpp:41:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   41 |     for(int i=0;i<adj[u].size();i++){
      |                 ~^~~~~~~~~~~~~~
printer.cpp: In function 'int main()':
printer.cpp:60:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   60 |     for(int i=0;i<pt.size();i++){
      |                 ~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...