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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

CF1364B-B. Most socially-distanced sub

發布時間:2024/5/14 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CF1364B-B. Most socially-distanced sub 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

CF1364B-B. Most socially-distanced subsequence

題意

給出一個長度為n的數字序列,讓你找出它的一個子序列,長度為k,使得這個子序列的 ∣ s 1 ? s 2 ∣ + ∣ s 2 ? s 3 ∣ + . . . + ∣ s k ? 1 ? s k ∣ \vert s_1-s_2 \vert + \vert s_2-s_3 \vert +...+ \vert s_{k-1}-s_k\vert s1??s2?+s2??s3?+...+sk?1??sk?的值最大且k最小。


思路

首先肯定是將全部的數字都算上去這個,這個值會是最大的。但是題目要求k的值最小,所以要將這些數字中對于這個值的增大沒有貢獻的數字去掉。

那么什么樣的數字對于這個值的增大沒有貢獻呢?假如一個有三個數字1、5、9,那么這個5對于這個值的增大就沒有貢獻,因為 ∣ 1 ? 5 ∣ + ∣ 5 ? 9 ∣ = ∣ 1 ? 9 ∣ \vert 1-5 \vert + \vert 5 - 9\vert=\vert1-9\vert 1?5+5?9=1?9;同樣的,若三個數字是 9 、 5 、 1 9、5、1 9、5、1,這里面的5對于數字的增大也沒有貢獻。

綜上,我們就是要把所有的比左邊大比右邊小的數字和比左邊小比右邊大的數字去掉,最終得到的序列就是答案。


AC代碼

#include <cstdio> #include <cstring> #include <iostream> #include <vector>std::vector<int>a;void solve() {int n, t;a.clear();scanf("%d", &n);for (int i = 0; i < n; i++) {scanf("%d", &t);a.push_back(t);}for (int i = 1; i < a.size() - 1; i++) {if (a[i] > a[i - 1] && a[i] < a[i + 1]) {a.erase(a.begin() + i);i--;} else if (a[i] < a[i - 1] && a[i] > a[i + 1]) {a.erase(a.begin() + i);i--;}}printf("%d\n", (int)a.size());for (int i = 0; i < a.size(); i++) {printf("%d%c", a[i], " \n"[i == a.size() - 1]);} }int main() {int T;scanf("%d", &T);while (T--) {solve();}return 0; }

總結

以上是生活随笔為你收集整理的CF1364B-B. Most socially-distanced sub的全部內容,希望文章能夠幫你解決所遇到的問題。

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