L2-002 链表去重 (25分)
代码真的要练练,4C都只拿部分分
就想bb一下
这题,直接按题目做啊
刚开始疯狂用stl,T的好惨
然后就是改scanf和int在输出的时候没有注意nxt的前导零,小问题,但是卡死我了
TLE
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 10;
vector<string> a, b;
unordered_map<string, string> mp;
unordered_map<string, int> val;
bool st[maxn];
int main() {
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int n;
string fi;
cin >> fi >> n;
if(n == 1) {
string add, nxt;
int x;
cin >> add >> x >> nxt;
cout << add << " " << x << " " << nxt;
return 0;
}
a.clear(); b.clear();
for(int i = 0; i < n; ++ i) {
string add, nxt;
int x;
cin >> add >> x >> nxt;
val[add] = x;
mp[add] = nxt;
}
string tmp = fi;
while(1) {
if(tmp == "-1" ) break;
int x = abs(val[tmp]);
if(!st[x]) {
a.push_back(tmp);
st[x] = 1;
}
else {
b.push_back(tmp);
}
tmp = mp[tmp];
}
int siz = a.size();
// cout << " ---------" << endl;
// for(int i = 0; i < siz; ++ i) {
// cout << a[i] << endl;
// }
// cout << "-------- \n";
for(int i = 0; i < siz - 1; ++ i) {
cout << a[i] << " " << val[a[i]] << " " << a[i + 1] << endl;
}
cout << a[siz - 1] << " " << val[a[siz - 1]] << " " << "-1" << endl;
if(b.size() == 0) {
return 0;
}
siz = b.size();
for(int i = 0; i < siz - 1; ++ i) {
cout << b[i] << " " << val[b[i]] << " " << b[i + 1] << endl;
}
cout << b[siz - 1] << " " << val[b[siz - 1]] << " " << "-1" << endl;
return 0;
}
AC
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 10;
struct node {
int add;
int val;
int nxt;
} mp[maxn];
bool vis[maxn];
vector<int> a, b;
int main() {
int fir;
int n;
scanf("%d%d", &fir, &n);
if(n == 1) {
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
printf("%05d %d %d", a, b, c);
return 0;
}
for(int i = 0, a, b, c; i < n; ++ i) {
scanf("%d %d %d", &a, &b, &c);
mp[a] = {a, b, c};
}
if(n == 0){
return 0;
}
a.clear(); b.clear();
int p = fir;
while(p != -1) {
int x = abs(mp[p].val);
if(!vis[x]) {
vis[x] = 1;
a.push_back(p);
}
else {
b.push_back(p);
}
p = mp[p].nxt;
}
if(b.size() == 0) {
return 0;
}
int siz = a.size();
for(int i = 0; i < siz - 1; ++ i) {
printf("%05d %d %05d\n", mp[a[i]].add, mp[a[i]].val, mp[a[i + 1]].add);
}
printf("%05d %d %d\n", mp[a[siz - 1]].add, mp[a[siz - 1]].val, -1);
if(b.size() == 0) {
return 0;
}
siz = b.size();
for(int i = 0; i < siz - 1; ++ i) {
printf("%05d %d %05d\n", mp[b[i]].add, mp[b[i]].val, mp[b[i + 1]].add);
}
printf("%05d %d %d", mp[b[siz - 1]].add, mp[b[siz - 1]].val, -1);
return 0;
}