6 solutions
-
3
#include<bits/stdc++.h> using namespace std; struct Node{ int data; Node *next; }; int a[1000010]; int main(){ //一半链表 +一半数组 int n; cin>>n; Node *head=new Node; Node *dfg=head; for(int i=1;i<=n;i++){ cin>>a[i]; if(a[a[i]]==0)a[a[i]]=i;//标记数值位置 (只标对应的) } Node *l=new Node; int h; cin>>h; l->data=h; Node *k=l; int u=h; for(int i=1;i<=n;i++){ // 连起来 Node *f=new Node;//创造一个新节点 f->data=a[u];//指向对应位置 k->next=f; k=f; u=a[u]; } k->data=0; //遍历 while(l->data!=0){ cout<<l->data<<" "; l=l->next; } return 0; }
-
-1
数组
#include<bits/stdc++.h> using namespace std; int arr[1000010],a2[1000010]; int main(){ int n,s,t;// cin>>n;// for(int i=1;i<=n;i++) cin>>arr[i];// cin>>s;// t=s;// for(int i=1;i<=n;i++){ a2[i]=t;// t=arr[t];// } for(int i=1;i<=n;i++) //cout<<a2[i]<<' '; return 0; } /////fangweibiaoji ///////////////////
-
-2
用了个递归
#include<iostream> using namespace std; const int N=1e6; int a[N]; int n,h; void f(int x,int t) { if(t>=n)//返回 return; cout<<x<<" ";//输出 f(a[x],t+1);//递归 } int main() { cin>>n;//输入 for(int i=1;i<=n;i++) { int x; cin>>x;//输入 a[i]=x; } cin>>h;//输入 f(h,0);//递归 return 0;//完结散花 }
-
-3
#include <bits/stdc++.h> using namespace std; int a[2000005]; int main(int argc, char **argv){ int n,h; cin >> n; for (int i = 1;i <= n;i++){ cin >> a[i]; } cin >> h; // 输入第一个数 for(int i = 0;a[h] != 0;i++){ printf("%d ",h); // 输出这个数 h = a[h]; // 变成指向的下一个数 } cout << h; // 最后别漏了 return 0; }
- 1
Information
- ID
- 943
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- 5
- Tags
- # Submissions
- 75
- Accepted
- 29
- Uploaded By