AtCoder Beginner Contest 092
C
因为是按顺序走的,所以假如第 i个点不用走,我们只需要减去第
i−1个点到第 i个点的距离,以及第 i个点到第 i+1个点的距离,最后再加上第
i−1个点到第 i+1 个点的距离即可
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| #include <bits/stdc++.h> using namespace std; int a[100001], n, ans; int main() { cin >> n; for (int i = 1; i <= n; ++i) cin >> a[i]; int b = 0; for (int i = 1; i <= n + 1; ++i) b += abs(a[i] - a[i - 1]); for (int i = 1; i <= n; ++i) { ans = b - abs(a[i] - a[i - 1]) - abs(a[i + 1] - a[i]) + abs(a[i + 1] - a[i - 1]); cout << ans << endl; } cout << endl; }
|
D
构造一个100*100的矩阵。
上半部分黑色,下半部分白色,
选择上半部分的B-1个不相邻的涂黑,下半部分类似。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| #include <bits/stdc++.h> #define int long long const int N = 155; using namespace std;
char col[N][N]; const int A = 50, B = 100;
void solve() { int a, b; cin >> a >> b; a--, b--; cout << B << ' ' << B << endl; for (int i = 1; i <= A; i++) for (int j = 1; j <= B; j++) { col[i][j] = '.'; col[i + A][j] = '#'; } for (int i = 2; b; i += 2) for (int j = 2; b && j <= B; j += 2) col[i][j] = '#', b--; for (int i = 52; a; i += 2) for (int j = 2; a && j <= B; j += 2) col[i][j] = '.', a--; for (int i = 1; i <= B; i++) { for (int j = 1; j <= B; j++) cout << col[i][j]; cout << endl; } }
main() { ios::sync_with_stdio(0); int _T = 1; while (_T--) solve(); }
|