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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[codeforces 1364B] Most socially-distanced subsequence 绝对值脱壳的4种形态

發(fā)布時(shí)間:2024/5/14 编程问答 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [codeforces 1364B] Most socially-distanced subsequence 绝对值脱壳的4种形态 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Codeforces Round #649 (Div. 2)? 參與排名人數(shù)11286

[codeforces 1364B]?? Most socially-distanced subsequence?? 絕對(duì)值脫殼的4種形態(tài)

總目錄詳見https://blog.csdn.net/mrcrack/article/details/103564004

在線測評(píng)地址https://codeforces.com/contest/1364/problem/B

ProblemLangVerdictTimeMemory
B - Most socially-distanced subsequence GNU C++17Accepted46?ms800?KB

題目大意:給定數(shù)組a,可以刪除任意元素,要求剩下的元素,相鄰差值絕對(duì)值和最大,對(duì)應(yīng)的剩下元素的個(gè)數(shù)最少,輸出最少個(gè)數(shù)。

|x-y|+|y-z|

1.|x-y|脫殼情況如下

x>=y,|x-y|=x-y

x<=y,|x-y|=y-x

2.|y-z|脫殼情況如下

y>=z,|y-z|=y-z

y<=z,|y-z|=z-y

3.|x-y|+|y-z|脫殼情況如下

有4種組合

x>=y,y>=z

|x-y|+|y-z|=x-y+y-z=x-z此種情況,可刪除元素y

x>=y,y<=z

|x-y|+|y-z|=x-y+z-y=x+z-2*y

x<=y,y>=z

|x-y|+|y-z|=y-x+y-z=2*y-(x+z)

x<=y,y<=z

|x-y|+|y-z|=y-x+z-y=z-x此種情況,可刪除元素y

按上述思路,采用棧(在連續(xù)數(shù)據(jù)中,有目的的選取部分?jǐn)?shù)據(jù),用棧比較合適)的方式,編寫的AC代碼如下

#include <stdio.h> #define maxn 100010 int a[maxn],st[maxn],top; void solve(){int i,x,y,z,n;scanf("%d",&n);for(i=1;i<=n;i++)scanf("%d",&a[i]);top=0;for(i=1;i<=n;i++){while(top>=2){x=st[top-1],y=st[top],z=i;if((a[x]>=a[y]&&a[y]>=a[z])||(a[x]<=a[y]&&a[y]<=a[z]))top--;else break;}st[++top]=i;}printf("%d\n",top);for(i=1;i<=top;i++)printf("%d ",a[st[i]]);printf("\n"); } int main(){int t;scanf("%d",&t);while(t--)solve();return 0; }

按上述思路,采用再開一個(gè)數(shù)組用來存儲(chǔ)剩下的數(shù)組元素,對(duì)應(yīng)的AC代碼,建議讀者不用細(xì)讀,只是告訴讀者掌握數(shù)據(jù)結(jié)構(gòu)有多么重要,懂和不懂,同一個(gè)思路,編出的代碼差太多了。

ProblemLangVerdictTimeMemory
B - Most socially-distanced subsequence GNU C++17Accepted62?ms1900?KB
#include <stdio.h> #define maxn 100010 int a[maxn],b[maxn],l[maxn],r[maxn],vis[maxn]; void solve(){int n,i,x,y,z,ans,j;scanf("%d",&n);for(i=1;i<=n;i++)scanf("%d",&a[i]);for(i=1;i<=n;i++)vis[i]=0;if(n==2){printf("2\n");for(i=1;i<=n;i++)printf("%d ",a[i]);printf("\n");return ;}l[2]=1,y=2,r[2]=3,j=0;while(y+1<=n){//n>=3if((a[l[y]]>=a[y]&&a[y]>=a[r[y]])||(a[l[y]]<=a[y]&&a[y]<=a[r[y]])){y++;l[y]=l[y-1],r[y]=y+1;if(!vis[l[y-1]])vis[l[y-1]]=1,b[++j]=a[l[y-1]];}else{if(!vis[l[y]])vis[l[y]]=1,b[++j]=a[l[y]];if(!vis[y])vis[y]=1,b[++j]=a[y];y++,l[y]=y-1,r[y]=y+1;;}}b[++j]=a[y];printf("%d\n",j);for(i=1;i<=j;i++)printf("%d ",b[i]);printf("\n"); } int main(){int t;scanf("%d",&t);while(t--)solve();return 0; }

?

總結(jié)

以上是生活随笔為你收集整理的[codeforces 1364B] Most socially-distanced subsequence 绝对值脱壳的4种形态的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。