日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Atcoder Beginner Contest 124 解题报告

發布時間:2025/3/21 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Atcoder Beginner Contest 124 解题报告 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

心態爆炸。本來能全做出來的。但是由于雙開了Comet oj一個比賽,寫了ABC就去搞那個的B題 還被搞死了。

回來寫了一會D就過了。可惜比賽已經結束了。真的是作死。

?

A - Buttons

#include <cstdio> using namespace std;int main() {int x, y;scanf("%d%d", &x, &y);int ans = x > y ? x : y;if (x > y) x--;else y--;if (x > y) ans += x;else ans += y;printf("%d", ans);return 0; } View Code

?

B - Great Ocean View

#include <cstdio> #include <algorithm> using namespace std;const int maxn = 25; int a[maxn];int main() {int n;scanf("%d", &n);for (int i = 0; i < n; i++) scanf("%d", &a[i]);int ans = 0;for (int i = 0; i < n; i++) {bool flag = false;for (int j = i - 1; j >= 0; j--) {if (a[i] < a[j]) {flag = true;break;}}if (!flag) ans++;}printf("%d\n", ans);return 0; } View Code


C - Coloring Colorfully

只有兩種排列方式 第一種為0或者第一種為1

跑兩遍取最小就好了

#include <bits/stdc++.h> using namespace std;const int maxn = 1e5 + 10; char s[maxn];int main() {scanf("%s", s);int len = strlen(s);if (len == 1) {puts("0");return 0;} int now = 0;int ans = 0;for (int i = 0; i < len; i++) {if (s[i] - '0' != now) ans++;now ^= 1;} int temp = 0;now = 1;for (int i = 0; i < len; i++) {if (s[i] - '0' != now) temp++;now ^= 1;}printf("%d\n", min(ans, temp));return 0; } View Code

?

D - Handstand

題意是一個長為N的01串,可以至多操作K次,每次操作任選一個區間都變成另一個顏色

求最長連續1的長度

問題就等價于有x個連續1的區間(遍歷統計一下)把 k+1 個區間并起來有多長(中間的0也得統計上)

區間用結構體存上l,r 統計答案就是G[i+k].r - G[i].l + 1

有多種情況要考慮

一是 0000000000001010101010101000000 這樣統計答案的時候

我們會忽略掉這些前導0和后導0 因為我們是從G[0].l開始統計的 所以不是正解

解決方案就是 G數組給加上頭和尾 G{0].l = G[0].r = 0 G[x].l = G[x].r = len-1

遍歷統計答案的時候就會把這些前導0后導0給算上

二是 000000000000000100000001000000000? k = 500 的情況

這是特殊情況 如果連續1的區間沒有k + 1大的話 答案就是len了

#include <bits/stdc++.h> using namespace std;const int maxn = 1e5 + 10; char s[maxn]; struct Point {int l, r; } G[maxn];int main() {int len, k;scanf("%d%d", &len, &k);scanf("%s", s);int l = 0;int cnt = 0;s[len] = '0';G[0].l = G[0].r = 0;cnt = 1;for (int i = 0; i <= len; i++) {if (s[i] == '1') {if (!l) G[cnt++].l = i;l++; } else {if (l) G[cnt-1].r = i - 1;l = 0;} }G[cnt].l = G[cnt].r = len - 1;cnt++;int ans = 0;if (k + 1 >= cnt) {printf("%d\n", len);return 0;}for (int i = 0; i < cnt; i++) {int temp = i + k;if (temp >= cnt) break;ans = max(ans, G[temp].r - G[i].l + 1);}ans = min(ans, len);printf("%d\n", ans);return 0; } View Code

?

下次再也不多開比賽了。

?

轉載于:https://www.cnblogs.com/Mrzdtz220/p/10703719.html

總結

以上是生活随笔為你收集整理的Atcoder Beginner Contest 124 解题报告的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。