고대어사전(dictionary lht94 #include<iostream> #include<vector> #include<string> #include<algorithm> using namespace std; vector<int> seen,order; vector<vector<int>> adj; void makegraph(const vector<string>& words) { adj=vector<vector<int>>(26,vector<int>(26,0)); for(int j=1; j<words.size(); j++) { int i=j-1, len=min(words[i].size(),words[j].size()); for(int k=0; k<len; k++){ if(words[i][k]!=words[j][k]){ int a=words[i][k]-'a'; int b=words[j][k]-'a'; adj[a][b]=1; break; }} } } void dfs(int here) { seen[here]=1; for(int there=0; there<adj.size();there++){ if(adj[here][there]&&!seen[there])dfs(there);} order.push_back(here); } vector<int> topologicalsort(){ int n= adj.size(); seen=vector<int>(n,0); order.clear(); for(int i=0; i<n;i++) if(!seen[i]) dfs(i); reverse(order.begin(), order.end()); for(int i=0; i<n; i++) for(int j=i+1; j<n; j++) if(adj[order[j]][order[i]]) return vector<int>(); return order; } int main() { int cases; cin>>cases; for(int cc=0; cc<cases; cc++) { vector<string> words; int num; vector<int>a; cin>>num; for(int i=0; i<num; i++) { string s; cin>>s; words.push_back(s); } makegraph(words); a=topologicalsort(); if(a.empty()) cout<<"INVALID HYPOTHESIS"; else { for(int n=0;n<adj.size(); n++) { char c=a[n]+'a'; cout<<c;} } } } 책보고 작성해본 코드인데요.. 틀린부분이 있는거 같은데 찾지못해 올려봅니다. main 작성을 잘못한거 같긴한데 실행해보면 이상하긴해도 사전순서를 지키거든요 ?? 근데 제출해보면 오답처리되서.. 뭐가잘못된건지 모르겠네요. 11년 전
3개의 댓글이 있습니다. Kureyo 왠지 줄내림을 안하시는ㅓ같은데요.. 11년 전 link Signin 네 줄바꿈 해서 제출하니까 정답이 뜨네요 ㅎ INVALID HYPOTHESIS 과, 전체 출력한 뒤의 줄바꿈만 해주시면 될 것 같습니다. 11년 전 link lht94 해결됬네요감사합니다건. 11년 전 link 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
lht94
책보고 작성해본 코드인데요..
틀린부분이 있는거 같은데 찾지못해 올려봅니다.
main 작성을 잘못한거 같긴한데
실행해보면 이상하긴해도 사전순서를 지키거든요 ??
근데 제출해보면 오답처리되서..
뭐가잘못된건지 모르겠네요.
11년 전