Codeforces Round 997 (Div. 2) A~D题解
A. Shape Perimeter
Q1 周长如何表示?
A1 可以表示为若干个 m × m m\times m m×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) 都有 p i < p j p_i<p_j pi<pj,同理一,对于图中的一条边 ( u , v ) (u,v) (u,v), 若 p u < p v p_u<p_v pu