344
A - Spoiler
输出两个 |
字符外面的字符串
void solve() {
string s;cin >> s;
int j = 1;
for (int i = 0;i < s.size();i++) {
if (s[i] != '|')cout << s[i];
else {
j = i;
break;
}
}
for (int i = j + 1;i < s.size();i++) {
if (s[i] == '|') {
j = i;
break;
}
}
for (int i = j + 1;i < s.size();i++) {
cout << s[i];
}
}
B - Delimiter
将输入的反向输出
void solve() {
int x;
vector<int>a;
while (cin >> x)a.push_back(x);
for (int i = a.size() - 1;i >= 0;i--)cout << a[i] << '\n';
}
C - A+B+C
看看是否能在
int a[110], b[110], c[110], x[200010];
void solve() {
int na, nb, nc, nx;
cin >> na;
for (int i = 1;i <= na;i++)cin >> a[i];
cin >> nb;
for (int i = 1;i <= nb;i++)cin >> b[i];
cin >> nc;
for (int i = 1;i <= nc;i++)cin >> c[i];
cin >> nx;
for (int i = 1;i <= nx;i++)cin >> x[i];
map<int, int> num;
for (int i = 1;i <= na;i++) {
for (int j = 1;j <= nb;j++) {
for (int k = 1;k <= nc;k++) {
num[a[i] + b[j] + c[k]] = 1;
}
}
}
for (int i = 1;i <= nx;i++) {
if (num[x[i]] == 1) {
cout << "Yes\n";
} else {
cout << "No\n";
}
}
}
D - String Bags
给出 -1
Solution
DP
DP 没太看懂,也不太会(待更
我们定义
处理了多少个袋子 接头部与 的匹配情况 = {达到所需的最小金额}。
考虑将第
此外,不做任何处理对应着从
#include<bits/stdc++.h>
using namespace std;
int dp[105][105];
int main() {
for (int i = 0;i < 105;i++) {
for (int j = 0;j < 105;j++) {
dp[i][j] = 1e9;
}
}
dp[0][0] = 0;
string t;
cin >> t;
int tl = t.size();
int n;
cin >> n;
for (int i = 0;i < n;i++) {
for (int j = 0;j < 105;j++) {
dp[i + 1][j] = dp[i][j];
}
int m;
cin >> m;
while (m--) {
string s;
cin >> s;
int sl = s.size();
for (int j = 0;j + sl <= tl;j++) {
bool ok = true;
for (int k = 0;k < sl;k++) {
if (t[j + k] != s[k]) {
ok = false;break;
}
}
if (ok) {//当s字符串是T字符串的一部分的时候
dp[i + 1][j + sl] = min(dp[i + 1][j + sl], dp[i][j] + 1);
}
}
}
}
if (dp[n][tl] == 1e9) dp[n][tl] = -1;
cout << dp[n][tl] << "\n";
}
E - Insert or Erase
给你一个长度为
请按照给出的顺序处理
1 x y
:在中元素 后面紧接着插入 。当给出此查询时,保证 存在于 中。 2 x
:从中删除元素 。当给出此查询时,保证 存在于 中。
保证在处理完每一个查询后,
处理完所有查询后,打印
Solution
链表
不懂(待更
void solve() {
int n;cin >> n;
list<int> a;
map<int, list<int>::iterator> mp;
for (int i = 1;i <= n;i++) {
int x;cin >> x;a.push_back(x);mp[x] = prev(a.end());
}
int q;cin >> q;
while (q--) {
int op;cin >> op;
if (op == 1) {
int x, y;cin >> x >> y;
mp[y] = a.insert(next(mp[x]), y);
} else {
int x;cin >> x;
a.erase(mp[x]);
}
}
for (auto i : a)cout << i << " ";
}
F - Earn to Advance
四维 DP