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 }

 

posted @ 2022-11-24 16:19  江上舟摇  阅读(25)  评论(0编辑  收藏  举报