Codeforces Round 997 (Div. 2) A~D题解
A. Shape Perimeter
Q1 周长如何表示?
A1 可以表示为若干个 m×mm\times mm×m 的正方形的周长之和减去重叠部分的周长之和。
Q2 重叠部分如何表示?
A2 设往右边移动 x 个单位,往上边移动 y 个单位,则会产生一个 (m−y)×(m−x)(m-y)\times(m-x)(m−y)×(m−x) 的重叠矩形。重叠部分是由上一个矩形的右上角和下一个矩形的左下角重叠而成,所以重叠矩阵的四条边都不会被计算。减去所有重叠矩阵周长即可。
#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize(2)
#define ll long long
#define PII pair<int,int>
#define endl "\n"
#define INF 1e18
#define int long long
const int N = 1000005; // 1e6 + 5
void solve () {
int n, m;
cin >> n >> m;
int ans = 0;
for (int i = 1; i <= n; i++) {
int x, y;
cin >> x >> y;
if (ans != 0)
ans = ans + m*4 - (2*(m - y)+2*(m - x));
else ans = 4*m;
}
cout << ans << endl;
}
signed main () {
std::ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
int t;
cin >> t;
while(t--){
solve();
}
}
B. Find the Permutation
Q1 图和排列有什么关系?
A1 对于任意一对顺序对在图中都能找到一条边。顺序对表示对于任意一对 (i,j)(i<j)(i,j) (i<j)(i,j)(i<j) 都有 pi<pjp_i<p_jpi<pj,同理一,对于图中的一条边 (u,v)(u,v)(u,v), 若 pu<pvp_u<p_vpu<