给定一个带整数键值的链表 L,你需要把其中绝对值重复的键值结点删掉,即对每个键值 K,只有第一个绝对值等于 K 的结点被保留。同时,所有被删除的结点须被保存在另一个链表上。例如给定 L 为 21->-15->-15->-7->15,你需要输出去重后的链表 21->-15->-7,还有被删除的链表 -15->15。
int L, n; int nxt[N], val[N]; vector<int> a, b; bool vis[N];
voidsol(){ cin >> L >> n; for (int i = 1; i <= n; i++){ int od, ne, v; scanf("%d%d%d", &od, &v, &ne); nxt[od] = ne, val[od] = v; } for (int p = L; p != -1; p = nxt[p]) if (vis[abs(val[p])]) b.push_back(p); else{ vis[abs(val[p])] = true; a.push_back(p); } int lena = a.size(); for (int i = 0; i < lena; i++){ printf("%05d %d ", a[i], val[a[i]]); if (i < lena - 1) printf("%05d\n", a[i + 1]); else printf("-1\n"); } int lenb = b.size(); for (int i = 0; i < lenb; i++){ printf("%05d %d ", b[i], val[b[i]]); if (i < lenb - 1) printf("%05d\n", b[i + 1]); else printf("-1\n"); } }
每个输入包含一个测试用例。每个测试用例先给出一个不超过 1000 的正整数 N 表示月饼的种类数,以及一个不超过 500(以万吨为单位)的正整数 D 表示市场最大需求量。随后一行给出 N 个正数表示每种月饼的库存量(以万吨为单位);最后一行给出 N 个正数表示每种月饼的总售价(以亿元为单位)。数字间以空格分隔。
booldfs(int l, int r, int op){ int root = a[l]; int p = l + 1; if (l > r) returntrue; if (l == r){ h.push_back(root); returntrue; } if (op == true){ while (p <= r && a[p] < root) p++; for (int i = p; i <= r; i++) if (a[i] < root) returnfalse; if (!dfs(l + 1, p - 1, op)) returnfalse; if (!dfs(p, r, op)) returnfalse; h.push_back(root); returntrue; } else{ while (p <= r && a[p] >= root) p++; for (int i = p; i <= r; i++) if (a[i] >= root) returnfalse; if (!dfs(l + 1, p - 1, op)) returnfalse; if (!dfs(p, r, op)) returnfalse; h.push_back(root); returntrue; } }
voidsol(){ cin >> n; a.resize(n); for (int i = 0; i < n; i++) cin >> a[i]; if (dfs(0, n - 1, true)){ cout << "YES" << endl; for (int i = 0; i < h.size(); i++){ cout << h[i]; if (i < h.size() - 1) cout << ' '; } } else{ h.clear(); vector<int>().swap(h); if (dfs(0, n - 1, false)){ cout << "YES" << endl; for (int i = 0; i < h.size(); i++){ cout << h[i]; if (i < h.size() - 1) cout << ' '; } } else{ cout << "NO" << endl; } } }
intmain(){ IO sol(); return0; }
L2-008 最长对称子串(分数 25)
对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定 Is PAT&TAP symmetric?,最长对称子串为 s PAT&TAP s,于是你应该输出 11。