pat list题目代码详解
1032:
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define IOS ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); 4 #define int long long 5 const int N=1e5+10; 6 struct node 7 { 8 char data; 9 int ne; 10 bool flag; 11 }le[N]; 12 void init() 13 { 14 for(int i=0;i<N;i++) 15 { 16 le[i].flag=false; 17 } 18 } 19 signed main() 20 { 21 IOS; 22 /* for(int i=0;i<N;i++) 23 le[i].flag=false;*/ 24 int st1,st2,n; 25 cin>>st1>>st2>>n; 26 for(int i=0;i<n;i++) 27 { 28 int a,e; 29 char d; 30 cin>>a>>d>>e; 31 le[a].data=d; 32 le[a].ne=e; 33 } 34 int s; 35 for(s=st1;~s;s=le[s].ne) 36 { 37 le[s].flag=true; 38 } 39 for(s=st2;~s;s=le[s].ne) 40 { 41 if(le[s].flag) 42 break; 43 } 44 if(s!=-1) 45 printf("%05lld",s); 46 else 47 printf("%lld",-1); 48 return 0; 49 }
1052:
1 //几个注意的点 2 //1.排序的时候是对于整个区间N进行排序的 3 //2输出节点的ne值的时候是下一个节点的address值 4 #include<bits/stdc++.h> 5 using namespace std; 6 #define int long long 7 #define IOS ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); 8 const int N=1e5+10; 9 int n; 10 struct node 11 { 12 int address; 13 int key; 14 int ne; 15 bool flag=false; 16 }le[N]; 17 int s1; 18 int cnt; 19 int s2; 20 /*void init() 21 { 22 for(int i=0;i<N;i++) 23 { 24 le[i].flag=false; 25 } 26 }*/ 27 bool cmp(node a,node b) 28 { 29 if(!a.flag||!b.flag) 30 { 31 return a.flag>b.flag; 32 } 33 else 34 return a.key<b.key; 35 } 36 signed main() 37 { 38 IOS; 39 // init(); 40 cin>>n>>s1; 41 int a,b,c; 42 for(int i=0;i<n;i++) 43 { 44 cin>>a>>b>>c; 45 le[a].address=a; 46 le[a].key=b; 47 le[a].ne=c; 48 } 49 for(int i=s1;~i;i=le[i].ne) 50 { 51 le[i].flag=true; 52 cnt++; 53 } 54 if(cnt==0) 55 { 56 cout<<0<<" "<<-1; 57 } 58 else 59 { 60 sort(le,le+N,cmp);//1 61 printf("%lld %05lld\n",cnt,le[0].address); 62 for(int i=0;i<cnt;i++) 63 { 64 if(i<cnt-1) 65 printf("%05lld %lld %05lld\n",le[i].address,le[i].key,le[i+1].address);//2 66 else 67 { 68 printf("%05lld %lld -1\n",le[i].address,le[i].key); 69 } 70 } 71 } 72 return 0; 73 }
1074:
1 //几个注意的点 2 //在交换位置的第一层循环里i+=k注意 3 //交换位置的坐标是i+j与i+k-j-1,这里其实可以推一下 4 //i+0,i+1,i+2.....i+k-1; 5 #include<bits/stdc++.h> 6 using namespace std; 7 #define int long long 8 #define IOS ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); 9 const int N=1e5+10; 10 int n; 11 int st; 12 int k; 13 vector<int>q; 14 struct node 15 { 16 int key; 17 int ne; 18 }le[N]; 19 signed main() 20 { 21 IOS; 22 cin>>st>>n>>k; 23 int a,b,c; 24 for(int i=0;i<n;i++) 25 { 26 cin>>a>>b>>c; 27 le[a].key=b; 28 le[a].ne=c; 29 } 30 for(int i=st;~i;i=le[i].ne) 31 { 32 33 q.push_back(i); 34 } 35 for(int i=0;i+k<=q.size();i+=k) 36 { 37 for(int j=0;j<k/2;j++) 38 { 39 swap(q[i+j],q[i+k-j-1]); 40 } 41 } 42 for(int i=0;i<q.size();i++) 43 { 44 if(i<q.size()-1) 45 { 46 printf("%05lld %lld %05lld\n",q[i],le[q[i]].key,q[i+1]); 47 } 48 else 49 { 50 printf("%05lld %lld -1",q[i],le[q[i]].key); 51 } 52 } 53 return 0; 54 }
1097:
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define int long long 4 #define IOS ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); 5 const int N=1e5+10; 6 vector<int>a,b; 7 struct node 8 { 9 int key; 10 int ne; 11 bool flag; 12 }le[N]; 13 int n; 14 int s; 15 bool vis[N]; 16 void init() 17 { 18 for(int i=0;i<N;i++) 19 { 20 le[i].flag=false; 21 } 22 } 23 signed main() 24 { 25 IOS; 26 cin>>s>>n; 27 int d,e,f; 28 for(int i=0;i<n;i++) 29 { 30 cin>>d>>e>>f; 31 le[d].key=e; 32 le[d].ne=f; 33 } 34 for(int i=s;~i;i=le[i].ne) 35 { 36 if(!vis[abs(le[i].key)]) 37 { 38 vis[abs(le[i].key)]=true; 39 a.push_back(i); 40 } 41 else 42 { 43 b.push_back(i); 44 } 45 } 46 for(int i=0;i<a.size();i++) 47 { 48 if(i<a.size()-1) 49 { 50 printf("%05lld %lld %05lld\n",a[i],le[a[i]].key,a[i+1]); 51 } 52 else 53 { 54 printf("%05lld %lld -1\n",a[i],le[a[i]].key); 55 } 56 } 57 for(int i=0;i<b.size();i++) 58 { 59 if(i<b.size()-1) 60 { 61 printf("%05lld %lld %05lld\n",b[i],le[b[i]].key,b[i+1]); 62 } 63 else 64 { 65 printf("%05lld %lld -1",b[i],le[b[i]].key); 66 } 67 } 68 return 0; 69 }
1161:
1 //大体思路:已经不难看出每逢两个就插入一个个数较小的链表的节点,且是从后向前 2 //做法是用a,b两个数组去存链表1和链表2的节点 3 //引入一个数组c,按照规则存储a,b数组的节点 4 //有一个需要注意的点是如果碰到b数组的个数大于a数组的个数,我们将ab数组交换。 5 //当然,这里是以a数组为较长的那一个数组了 6 #include<bits/stdc++.h> 7 using namespace std; 8 #define int long long 9 #define IOS ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); 10 const int N=1e5+10; 11 int n; 12 int s1; 13 int s2; 14 struct node 15 { 16 int key; 17 int ne; 18 bool flag; 19 }le[N]; 20 vector<int>a,b,c; 21 void init() 22 { 23 for(int i=0;i<N;i++) 24 { 25 le[i].flag=false; 26 } 27 } 28 signed main() 29 { 30 IOS; 31 cin>>s1>>s2>>n; 32 int d,e,f; 33 for(int i=0;i<n;i++) 34 { 35 cin>>d>>e>>f; 36 le[d].key=e; 37 le[d].ne=f; 38 39 } 40 for(int i=s1;~i;i=le[i].ne) 41 { 42 a.push_back(i); 43 } 44 for(int i=s2;~i;i=le[i].ne) 45 { 46 b.push_back(i); 47 } 48 if(a.size()<b.size()) 49 { 50 swap(a,b); 51 } 52 for(int i=0,j=b.size()-1;i<a.size();i++) 53 { 54 c.push_back(a[i]); 55 if(i&1&&j>=0)//下标是从0开始的 56 { 57 c.push_back(b[j--]); 58 } 59 } 60 for(int i=0;i<c.size();i++) 61 { 62 if(i<c.size()-1) 63 { 64 printf("%05lld %lld %05lld\n",c[i],le[c[i]].key,c[i+1]); 65 } 66 else 67 { 68 printf("%05lld %lld -1",c[i],le[c[i]].key); 69 } 70 } 71 return 0; 72 }
1133:
1 //大体思路就是用三个数组来存小于0,小于等于k,大于k的数的地址 2 //需要注意的是他的输出方式 3 #include<bits/stdc++.h> 4 using namespace std; 5 #define int long long 6 #define IOS ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); 7 const int N=1e5+10; 8 //vector<int>a,b,c;//分别来存储负数的地址和小于k的地址,以及剩下的地址 9 vector<int>a[3]; 10 struct node 11 { 12 int key; 13 int ne; 14 bool flag; 15 }le[N]; 16 int n,k; 17 int st; 18 signed main() 19 { 20 //IOS; 21 cin>>st>>n>>k; 22 int d,e,f; 23 for(int i=0;i<n;i++) 24 { 25 cin>>d>>e>>f; 26 le[d].key=e; 27 le[d].ne=f; 28 } 29 for(int i=st;~i;i=le[i].ne) 30 { 31 if(le[i].key<0) 32 a[0].push_back(i); 33 if(le[i].key<=k&&le[i].key>=0) 34 { 35 a[1].push_back(i); 36 } 37 if(le[i].key>k) 38 { 39 a[2].push_back(i); 40 } 41 } 42 /*for(int i=0;i<a.size();i++) 43 { 44 if(i<a.size()-1) 45 { 46 printf("%05lld %lld %05lld\n",a[i],le[a[i]].key,a[i+1]); 47 } 48 else{ 49 printf("%05lld %lld ",a[i],le[a[i]].key); 50 } 51 } 52 printf("%05lld\n",b[0]); 53 for(int i=0;i<b.size();i++) 54 { 55 if(i<b.size()-1) 56 { 57 printf("%05lld %lld %05lld\n",b[i],le[b[i]].key,b[i+1]); 58 } 59 else{ 60 printf("%05lld %lld ",b[i],le[b[i]].key); 61 } 62 } 63 printf("%05lld\n",c[0]); 64 for(int i=0;i<c.size();i++) 65 { 66 if(i<c.size()-1) 67 { 68 printf("%05lld %lld %05lld\n",c[i],le[c[i]].key,c[i+1]); 69 } 70 else 71 { 72 printf("%05lld %lld -1",c[i],le[c[i]].key); 73 } 74 }*/ 75 bool flag=false; 76 for(int i=0;i<3;i++) 77 { 78 for(int j=0;j<a[i].size();j++) 79 { 80 if(!flag) 81 { 82 printf("%05lld %lld ",a[i][j],le[a[i][j]].key); 83 flag=true; 84 } 85 else 86 { 87 printf("%05lld\n%05lld %lld ",a[i][j],a[i][j],le[a[i][j]].key); 88 } 89 } 90 91 } 92 cout<<-1; 93 return 0; 94 }
本文来自博客园,作者:江上舟摇,转载请注明原文链接:https://www.cnblogs.com/LQS-blog/p/16922250.html