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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

小朋友 排序

發布時間:2023/12/14 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 小朋友 排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在幼兒園有n個小朋友排列為一個隊伍,從左到右一個挨著一個編號為(0~n-1)。其中有一些是男生,有一些是女生,男生用'B'表示,女生用'G'表示。
小朋友們都很頑皮,當一個男生挨著的是女生的時候就會發生矛盾。作為幼兒園的老師,你需要讓男生挨著女生或者女生挨著男生的情況最少。
你只能在原隊形上進行調整,每次調整只能讓相鄰的兩個小朋友交換位置,現在需要盡快完成隊伍調整,你需要計算出最少需要調整多少次可以讓上述情況最少。
例如:
GGBBG -> GGBGB -> GGGBB
這樣就使之前的兩處男女相鄰變為一處相鄰,需要調整隊形2次

分析

最終目標是將男孩移到最左邊,或者將女孩移到最左邊。

如果有B個男孩,則移到最左邊的index分別為:0,1,2...B-1,所以所有index的和為(B-1)*B/2

一次遍歷,計算目前男孩所在的index的和為sumB,則sumB減去上面的和就是所求的結果。

因此只要一次遍歷,計算男孩所在的男孩的個數和男孩所在的index的和,求之差就行了。女孩同理。最后求最小值。

1 #include <string> 2 #include <iostream> 3 using namespace std; 4 int main(){ 5 string S; 6 cin>>S; 7 int B=0; 8 int G=0; 9 int sumB=0; 10 int sumG=0; 11 for(int i=0;i<S.size();i++){ 12 if(S[i]=='G'){ 13 G++; 14 sumG+=i; 15 } 16 else{ 17 B++; 18 sumB+=i; 19 } 20 } 21 int ret1=sumB-B*(B-1)/2; 22 int ret2=sumG-G*(G-1)/2; 23 int ret=ret1<ret2?ret1:ret2; 24 cout<<ret; 25 return 0; 26 }

?

轉載于:https://www.cnblogs.com/D-DZDD/p/7349185.html

總結

以上是生活随笔為你收集整理的小朋友 排序的全部內容,希望文章能夠幫你解決所遇到的問題。

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