【專題複習6:連結串列】1032、1052、1074、1097、1133
阿新 • • 發佈:2022-03-03
1032
點選檢視程式碼
#include <bits/stdc++.h> using namespace std; struct Node { char key; int next; bool flag; }node[100000]; int main() { #ifdef ONLINE_JUDGE #else freopen("1.txt", "r", stdin); #endif int n,s1,s2,id; cin>>s1>>s2>>n; for(int i=0;i<n;i++){ cin>>id; cin>>node[id].key>>node[id].next; } for(int i=s1;i!=-1;i=node[i].next) node[i].flag=true; for(int i=s2;i!=-1;i=node[i].next){ if(node[i].flag==true){ printf("%05d",i); return 0; } } printf("-1"); return 0; }
1052
1052
可惡,我的眼睛咋這麼不好使呢,一個bug卡了半天竟是因為cnt寫成了n...
點選檢視程式碼
#include <bits/stdc++.h> using namespace std; struct Node { int data,key; int next; bool flag; } v[100000]; bool cmp(Node a,Node b) { return !a.flag||!b.flag?a.flag>b.flag:a.key<b.key; } int main() { #ifdef ONLINE_JUDGE #else freopen("1.txt", "r", stdin); #endif int n,s1,id,cnt=0; cin>>n>>s1; for(int i=0; i<n; i++) { cin>>id; v[id].data=id; cin>>v[id].key>>v[id].next; } for(int i=s1; i!=-1; i=v[i].next){ v[i].flag=true; cnt++; } if(cnt==0) cout<<"0 -1"; else { sort(v,v+100000,cmp); printf("%d %05d\n",cnt,v[0].data); for(int i=0; i<cnt-1; i++) { printf("%05d %d %05d\n",v[i].data,v[i].key,v[i+1].data); } printf("%05d %d -1\n",v[cnt-1].data,v[cnt-1].key); } return 0; }
1074
1074
這個用法reverse(begin(result)+i,begin(result)+i+k);
還是少,但是柳神這個數學表示式result[i] = list[i / k * k + k - 1 - i % k];
也太難想了T^T
點選檢視程式碼
#include <bits/stdc++.h> using namespace std; const int maxn=100000; int Address[maxn],Next[maxn],result[maxn]; int main() { #ifdef ONLINE_JUDGE #else freopen("1.txt", "r", stdin); #endif int n,s,k,id,key,nxt,cnt=0; cin>>s>>n>>k; for(int i=0; i<n; i++) { cin>>id>>key>>nxt; Address[id]=key; Next[id]=nxt; } for(int i=s; i!=-1; i=Next[i]){ result[cnt++]=i; } for(int i=0;i<cnt-cnt%k;i+=k) reverse(begin(result)+i,begin(result)+i+k); for(int i=0; i<cnt-1; i++) { printf("%05d %d %05d\n",result[i],Address[result[i]],result[i+1]); } printf("%05d %d -1\n",result[cnt-1],Address[result[cnt-1]]); return 0; }
1097
點選檢視程式碼
#include <bits/stdc++.h>
using namespace std;
const int maxn=100000;
struct Node
{
int address,key,next;
int num=2*maxn;
}node[maxn];
int vis[maxn];
bool cmp(Node a,Node b){ return a.num<b.num;}
int main()
{
#ifdef ONLINE_JUDGE
#else
freopen("1.txt", "r", stdin);
#endif
int n,s,id,cnt1=0,cnt2=0;
cin>>s>>n;
for(int i=0; i<n; i++)
{
cin>>id;
node[id].address=id;
cin>>node[id].key>>node[id].next;
}
for(int i=s;i!=-1;i=node[i].next){
if(vis[abs(node[i].key)]==false){
node[i].num=cnt1;
vis[abs(node[i].key)]=true;
cnt1++;
}else{
node[i].num=maxn+cnt2;
cnt2++;
}
}
sort(node,node+maxn,cmp);
int cnt=cnt1+cnt2;
for(int i=0; i<cnt; i++)
{
if(i!=cnt1-1&&i!=cnt-1)
printf("%05d %d %05d\n",node[i].address,node[i].key,node[i+1].address);
else
printf("%05d %d -1\n",node[i].address,node[i].key);
}
return 0;
}
1133
正確答案
點選檢視程式碼
#include <bits/stdc++.h>
using namespace std;
const int maxn=100000;
struct Node
{
int address,key,next;
}node[maxn];
int vis[maxn];
int main()
{
#ifdef ONLINE_JUDGE
#else
freopen("1.txt", "r", stdin);
#endif
int n,s,id,k;
cin>>s>>n>>k;
for(int i=0; i<n; i++)
{
cin>>id;
node[id].address=id;
cin>>node[id].key>>node[id].next;
}
vector<int> v[3];
for(int i=s;i!=-1;i=node[i].next){
if(node[i].key<0){
v[0].push_back(i);
}else if(node[i].key>k){
v[2].push_back(i);
}else v[1].push_back(i);
}
int flag=0;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < v[i].size(); j++) {
if (flag == 0) {
printf("%05d %d ", v[i][j], node[v[i][j]].key);
flag = 1;
} else {
printf("%05d\n%05d %d ", v[i][j], v[i][j], node[v[i][j]].key);
}
}
}
printf("-1");
return 0;
}
19分答案
我這個答案輸出處理的和shit一樣Orz
點選檢視程式碼
#include <bits/stdc++.h>
using namespace std;
const int maxn=100000;
struct Node
{
int address,key,next;
}node[maxn];
int vis[maxn];
int main()
{
#ifdef ONLINE_JUDGE
#else
freopen("1.txt", "r", stdin);
#endif
int n,s,id,k;
cin>>s>>n>>k;
for(int i=0; i<n; i++)
{
cin>>id;
node[id].address=id;
cin>>node[id].key>>node[id].next;
}
vector<int> v[3];
for(int i=s;i!=-1;i=node[i].next){
if(node[i].key<0){
v[0].push_back(i);
}else if(node[i].key>k){
v[2].push_back(i);
}else v[1].push_back(i);
}
for(int i=0; i<v[0].size(); i++){
if(i!=v[0].size()-1)
printf("%05d %d %05d\n",v[0][i],node[v[0][i]].key,v[0][i+1]);
else if(v[1].size()!=0)
printf("%05d %d %d\n",v[0][i],node[v[0][i]].key,v[1][0]);
}
for(int i=0; i<v[1].size(); i++){
if(i!=v[1].size()-1)
printf("%05d %d %05d\n",v[1][i],node[v[1][i]].key,v[1][i+1]);
else if(v[2].size()!=0)
printf("%05d %d %d\n",v[1][i],node[v[1][i]].key,v[2][0]);
}
for(int i=0; i<v[2].size(); i++){
if(i!=v[2].size()-1)
printf("%05d %d %05d\n",v[2][i],node[v[2][i]].key,v[2][i+1]);
else
printf("%05d %d -1\n",v[2][i],node[v[2][i]].key);
}
return 0;
}
本文來自部落格園,作者:勇往直前的力量,轉載請註明原文連結:https://www.cnblogs.com/moonlight1999/p/15957599.html