Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <bits/stdc++.h>
- #include <string>
- #include <math.h>
- using namespace std;
- bool shaml(stack <string> cont , string b);
- stack <string> putall(stack <string> cont);
- void addrow(vector < vector <char> > *cont,vector < string > c,int row,int col);
- void addcol(vector < vector <char> > *cont,vector < string > c,int row,int col);
- void ins(vector < vector <char> > *ss,char a,char b);
- vector <string> gee(string x);
- string getresult(vector < vector <char> > cont);
- int getunvistednode(bool arr[],int size);
- void die(vector < vector <char> > cont,stack <char> *result,bool arr[],int node);
- bool check(char x,vector < vector <char> > cont,bool arr[]);
- int getnum(vector < vector <char> > cont,char a);
- int main() {
- vector < string > c;
- string o;
- do {
- cin>>o;
- c.push_back(o);
- } while(o!="#");
- vector < vector <char> > cont;
- set <char> q;
- for(int i=0;i<c.size()-1;i++){
- for(int j=0;j<(c[i]).length();j++){
- if(!q.count(c[i][j])){
- vector <char >t;
- t.push_back(c[i][j]);
- cont.push_back(t);
- q.insert(c[i][j]);
- }
- // addrow(&cont,c,i,j);
- addcol(&cont,c,i,j);
- }
- }
- /*for(int i=0;i<cont.size();i++){
- for(int j=0;j<cont[i].size();j++){
- cout<<cont[i][j]<<" ";
- }
- cout<<endl;
- }*/
- //vector < vector <char> > cont;
- //cont.resize()
- cout<<(getresult(cont));
- }
- string getresult(vector < vector <char> > cont){
- int size=cont.size();
- bool death[size]={false};
- stack <char> result;
- int t=getunvistednode(death,size);
- while(getunvistednode(death,size)!=-1){
- die(cont,&result,death,getunvistednode(death,size));
- }
- string x="";
- while(!result.empty()){
- x+=result.top();
- result.pop();
- }
- return x;
- }
- void die(vector < vector <char> > cont,stack <char> *result,bool arr[],int node){
- if(arr[node])return;
- arr[node]=true;
- for(int i=1;i<cont[node].size();i++){
- if(!check(cont[node][i],cont,arr)){
- die(cont,&(*result),arr,getnum(cont,cont[node][i]));
- }
- }
- (*result).push(cont[node][0]);
- }
- int getnum(vector < vector <char> > cont,char a){
- for(int i=0;i<cont.size();i++){
- if(cont[i][0]==a)
- return i;
- }
- }
- bool check(char x,vector < vector <char> > cont,bool arr[]){
- for(int i=0;i<cont.size();i++){
- if(cont[i][0]==x){
- return arr[i];
- }
- }
- }
- int getunvistednode(bool arr[],int size){
- for(int i=0;i<size;i++){
- if(!arr[i])
- return i;
- }
- return -1;
- }
- void addcol(vector < vector <char> > *cont,vector < string > c,int row,int col){
- string guide="";
- for(int i=0;i<col;i++){
- guide+=(c)[row][i];
- }
- for(int i=row+1;i<(c).size()-1;i++){
- string war="";
- if(c[row].length()<col)continue;
- for(int j=0;j<col;j++){
- war+=(c)[i][j];
- }
- if(war==guide){
- ins(&(*cont),c[row][col],c[i][col]);
- }else{
- return;
- }
- }
- }
- void ins(vector < vector <char> > *ss,char a,char b){
- if(a==b)return;
- for(int i=0;i<(*ss).size();i++){
- if((*ss)[i][0]==a){
- for(int j=1;j<(*ss)[i].size();j++){
- if((*ss)[i][j]==b){
- return;
- }
- }
- (*ss)[i].push_back(b);
- return ;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement