Untitled
unknown
plain_text
3 years ago
2.7 kB
3
Indexable
#include<stdio.h> #include<stdlib.h> #include<string.h> long int n,m; typedef struct node{ char* st; long int stl; struct node* next; }Node; Node* createNode(); void swap(long int,long int); void move(long int,long int,long int); Node* head; Node* address[100001]; int main(){ freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); scanf("%ld",&n); head = createNode(); scanf("%ld",&m); while(m--){ long int x,a,b; scanf("%ld %ld %ld",&x,&a,&b); if(x==1){ move(x,a,b); } else if(x==2){ move(x,b,a); } else if(x==3){ swap(a,b); } } int d=1; while(d<=n){ Node* cp = address[d]; if(cp->stl==0){ printf("\n"); d++; } else{ printf("%s",cp->st); printf("\n"); d++; } } } Node* createNode(){ Node* head = (Node*)malloc(sizeof(Node*)); head->next = NULL; Node* cp = head; int c; int a=1; char* s; Node* p ; while(n--){ scanf("%ld",&c); if(c==0){ s = (char*)malloc(sizeof(char)); *s = '\0'; } else{ s = (char*)malloc((c+1)*sizeof(char)); scanf(" %s",s); } cp->st = s; cp->stl = strlen(s); address[a] = cp; if(n==0){ cp->next = NULL; } else{ p = (Node*)malloc(sizeof(Node*)); cp->next = p; cp = cp->next; } a++; } cp->next = NULL; return head; } void move(long int x,long int a,long int b){ Node* p1 = address[a]; char* s1 = p1->st; Node* p2 = address[b]; char* s2 = p2->st; strcat(s1,s2); if(p2->stl!=0) free(p2->st); char* ts = (char*)malloc(sizeof(char)); *ts = '\0'; if(x==1){ p2->st = p1->st; p1->st = ts; p2->stl = (p1->stl)+(p2->stl); p1->stl = 0; } else if(x==2){ p2->st = ts; p1->stl = (p1->stl)+(p2->stl); p2->stl = 0; } } void swap(long int a,long int b){ Node* p1 = address[a]; char* s1 = p1->st; Node* p2 = address[b]; char* s2 = p2->st; char* sa = s1; char* sb = s2; long int templ; long int s1l = p1->stl; long int s2l = p2->stl; char* temp = (char*)malloc(s1l*sizeof(char)); strcpy(temp,sa); strcpy(sa,sb); strcpy(sb,temp); templ = s1l; s1l = s2l; s2l = templ; p1->stl = s1l; p2->stl = s2l; if(temp!=NULL) free(temp); }
Editor is loading...