您的位置:首页 > 其它

L2-002. 链表去重

2018-03-23 20:27 302 查看

L2-002. 链表去重

有是一道模拟!!!!



#include<bits/stdc++.h>
#include<cstdlib>
#define ll long long

using namespace std;
const int maxn = 1e5+7;
typedef struct nod{
int s1;
int c;
int nexts;
} nod;

nod n1[maxn],n2[maxn], n3[maxn];
map<int, int> mp1;
map<int, int> mp2;

int main()
{
int s, s1, s2, n, c;
scanf("%d%d", &s, &n);
for(int i = 0; i < n; i++){
scanf("%d%d%d", &s1, &c, &s2);
mp1[s1] = c;
mp2[s1] = s2;
}
int cast = 0;
for(int i = 0; i < n && s != -1; i++)
{
n1[i].s1 = s;
n1[i].c = mp1[s];
n1[i].nexts = mp2[s];
s = mp2[s];
cast++;
}
int cas3 = 0, cas2 = 0;
n = cast;
set<int> st;
for(int i = 0; i < n; i++) {
if(st.count(abs(n1[i].c)) == 0) {
n2[cas2++] = n1[i];
st.insert(abs(n1[i].c));
} else {
n3[cas3++] = n1[i];
}
}
for(int i = 0; i < cas2 - 1; i++) {
n2[i].nexts = n2[i+1].s1;
}
n2[cas2 - 1].nexts = -1;

for(int i = 0; i < cas3 - 1; i++) {
n3[i].nexts = n3[i+1].s1;
}
if(cas3 != 0)
n3[cas3 - 1].nexts = -1;

for(int i = 0; i < cas2 - 1; i++) {
printf("%05d %d %05d\n", n2[i].s1, n2[i].c, n2[i].nexts);
}
printf("%05d %d %d\n", n2[cas2 - 1].s1, n2[cas2 - 1].c, n2[cas2 - 1].nexts);

for(int i = 0; i < cas3 - 1; i++) {
printf("%05d %d %05d\n", n3[i].s1, n3[i].c, n3[i].nexts);
}
if(cas3 != 0)
printf("%05d %d %d\n", n3[cas3 - 1].s1, n3[cas3 - 1].c, n3[cas3 - 1].nexts);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: