示例1:
输入
#include <bits/stdc++.h>
using namespace std;
int main() {
int a, b;
<<<<<<< branch1
cin >> a >> b;
=======
scanf("%d%d", &a, &b);
>>>>>>> branch2
if (a < 0 || b < 0) return 1;
<<<<<<< branch1
cout << a + b << endl;
=======
printf("%d\n", a + b);a
>>>>>>> branch2
}
输出
#include <bits/stdc++.h>
using namespace std;
int main() {
int a, b;
#ifdef branch1
cin >> a >> b;
if (a < 0 || b < 0) return 1;
cout << a + b << endl;
#else
scanf("%d%d", &a, &b);
if (a < 0 || b < 0) return 1;
printf("%d\n", a + b);a
#endif
}
示例2:
输入
<<<<<<< branch1
int main() {
return 0;
}
=======
int main() {
}
>>>>>>> branch2
输出
示例3:
输入
<<<<<<< branch1
int main() {}
=======
int main() {}
>>>>>>> branch2
```cpp
int main() {
#ifdef branch1
return 0;
#endif
}
输出
int main() {}
代码:
/*
* Author : YangDavid
* Created Time : 2020.07.25 14:32:26
*/
#include<bits/stdc++.h>
#define rep(i, n) for(int i = 1; i <= n; ++i)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<short, short> pii;
const ull P = 13313, Q = 233, MAXN = 4020;
vector<string> br1, br2;
vector<ull> hs1, hs2;
void input() {
int state = 0;
string line;
while(getline(cin, line)) {
if(line == "<<<<<<< branch1") {
state = 1; //
} else if(line == "=======") {
state = 2;
} else if(line == ">>>>>>> branch2") {
state = 0;
} else {
ull mys = 0;
for(auto g : line) mys = mys * P + Q + g;
if(state != 1) br2.push_back(line), hs2.push_back(mys);
if(state != 2) br1.push_back(line), hs1.push_back(mys);
}
}
}
int dp[MAXN][MAXN], rowcho[MAXN*2], colcho[MAXN*2];
pii fa[MAXN][MAXN], mn[MAXN];
int eval(int i, int j) { return dp[i][j]; }
int eval(pii p) { return dp[p.first][p.second]; }
void solve() {
memset(dp, 0x3f, sizeof dp);
dp[0][0] = 0;
int n = (int)br1.size(), m = (int)br2.size();
for(int i = 0; i <= n; ++i) {
for(int j = 0; j <= m; ++j) if(i || j) {
if(j && eval(mn[j]) > eval(mn[j-1])) mn[j] = mn[j-1];
dp[i][j] = eval(mn[j]) + 3, fa[i][j] = mn[j];
if(i && j && hs1[i-1] == hs2[j-1] && dp[i-1][j-1]-1 < dp[i][j]) {
dp[i][j] = dp[i-1][j-1] - 1;
fa[i][j] = {i-1, j-1};
}
if(dp[rowcho[j]][j] + 2 < dp[i][j]) {
dp[i][j] = dp[rowcho[j]][j] + 2;
fa[i][j] = {rowcho[j], j};
}
if(dp[i][colcho[i]] + 2 < dp[i][j]) {
dp[i][j] = dp[i][colcho[i]] + 2;
fa[i][j] = {i, colcho[i]};
}
if(dp[i][j] < eval(mn[j])) mn[j] = {i, j};
if(dp[i][j] < dp[i][colcho[i]]) colcho[i] = j;
if(dp[i][j] < dp[rowcho[j]][j]) rowcho[j] = i;
}
}
vector<string> ans;
int x = n, y = m;
while(x + y > 0) {
static int fx, fy;
tie(fx, fy) = fa[x][y];
if(dp[fx][fy] - 1 == dp[x][y]) {
ans.push_back(br1[fx]);
} else if(dp[fx][fy]+2 == dp[x][y]) {
if(fx == x) {
ans.emplace_back("#endif");
for(int i = y-1; i >= fy; --i)
ans.push_back(br2[i]);
ans.emplace_back("#ifdef branch2");
} else if(fy == y) {
ans.emplace_back("#endif");
for(int i = x-1; i >= fx; --i)
ans.push_back(br1[i]);
ans.emplace_back("#ifdef branch1");
} else assert(false);
} else {
ans.emplace_back("#endif");
for(int i = y-1; i >= fy; --i)
ans.push_back(br2[i]);
ans.emplace_back("#else");
for(int i = x-1; i >= fx; --i)
ans.push_back(br1[i]);
ans.emplace_back("#ifdef branch1");
}
x = fx, y = fy;
}
reverse(ans.begin(), ans.end());
for(auto line : ans)
cout << line << '\n';
}
int main() {
ios::sync_with_stdio(false);
input();
solve();
return 0;
}
此程序来源于竞赛参与者,如有违权联系删除。