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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

洛谷P2525 Uim的情人节礼物·其之壱(组合数学/上一个全排列/下一个全排列)

發(fā)布時間:2023/12/9 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 洛谷P2525 Uim的情人节礼物·其之壱(组合数学/上一个全排列/下一个全排列) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目

給定長度為n(n<=9)的全排列,

輸出比該全排列上一個字典序的全排列,

不存在輸出ERROR

思路來源

https://www.luogu.com.cn/problemnew/solution/P2525

題解

組合數(shù)學(xué)惡補第二彈,orz這個可是洛谷入門題

考慮上一個字典序,一定出現(xiàn)在某一位比當前全排列小了,且是最靠后的一位

對于相鄰的正序?qū)?#xff0c;無法交換其順序,所以一定是從后往前的第一個逆序?qū)?/p>

若a[i-1]>a[i],則可以把a[i-1]調(diào)小,變成字典序更小的全排列,

所以找到范圍內(nèi)滿足a[x]<a[i-1]且值最大的那個位置x,將其與a[i-1]交換,

交換之后,起到了降字典序的目的,后面的數(shù)應(yīng)降序排列,使當前的字典序最大

代碼1

#include<iostream> #include<cstdio> #include<algorithm> using namespace std; typedef long long ll; const int N=10; int n,a[N],b[N],cnt; bool ok; void solve(int x){//[x,n)int mx=-1,pos=-1;for(int i=x+1;i<n;++i){//<a[x]的最大的 從最小的逆序一位開始調(diào)小 if(a[i]<a[x]){if(a[i]>mx){mx=a[i];pos=i;}}}swap(a[pos],a[x]);sort(a+x+1,a+n,greater<int>());//后面的降序即可 表示此時的最大 } int main(){scanf("%d",&n); for(int i=0;i<n;++i){scanf("%d",&a[i]);}for(int i=n-1;i;--i){if(a[i-1]>a[i]){solve(i-1);for(int j=0;j<n;++j){printf("%d%c",a[j]," \n"[j==n-1]);}ok=1;break;}}if(!ok)puts("ERROR");return 0; }

代碼2(prev_permutation)

用STL水,調(diào)用該函數(shù),若上一個全排列存在,則會使ai變成上一個全排列,否則返回假

#include<iostream> #include<cstdio> #include<algorithm> using namespace std; typedef long long ll; const int N=10; int n,a[N],b[N],cnt; int main(){scanf("%d",&n); for(int i=0;i<n;++i){scanf("%d",&a[i]);}if(!prev_permutation(a,a+n))puts("ERROR");else{for(int i=0;i<n;++i){printf("%d%c",a[i]," \n"[i==n-1]);}}return 0; }

后續(xù)(2021.5.7)

下一個全排列類似,可以參考1850. 鄰位交換的最小次數(shù)

class Solution:def getMinSwaps(self, num: str, k: int) -> int:def getnext(nums):n = len(nums)for i in range(n-2,-1,-1):if nums[i]<nums[i+1]:mn, pos = '9', -1for j in range(i+1,n):if num[j]>nums[i]:if mn > nums[i]:mn, pos = nums[j], j nums[i],nums[pos] = nums[pos],nums[i]nums[i+1:n] = sorted(nums[i+1:n])return numstmp = list(num)num = list(num)n = len(num)ans = 0for i in range(k):num = getnext(num)# print(num)for i in range(n):if tmp[i] == num[i]:continuepos = -1for j in range(i+1,n):if num[j] == tmp[i]:pos = jbreakfor j in range(pos,i,-1):num[j],num[j-1] = num[j-1],num[j]ans += 1return ans ['9', '4', '8', '6', '5', '3'] ['9', '5', '3', '4', '6', '8'] ['9', '5', '3', '4', '8', '6'] ['9', '5', '3', '6', '4', '8'] ['9', '5', '3', '6', '8', '4'] ['9', '5', '3', '8', '4', '6'] ['9', '5', '3', '8', '6', '4'] ['9', '5', '4', '3', '6', '8'] ['9', '5', '4', '3', '8', '6'] ['9', '5', '4', '6', '3', '8'] ['9', '5', '4', '6', '8', '3'] ['9', '5', '4', '8', '3', '6'] ['9', '5', '4', '8', '6', '3'] ['9', '5', '6', '3', '4', '8'] ['9', '5', '6', '3', '8', '4'] ['9', '5', '6', '4', '3', '8'] ['9', '5', '6', '4', '8', '3'] ['9', '5', '6', '8', '3', '4'] ['9', '5', '6', '8', '4', '3'] ['9', '5', '8', '3', '4', '6'] ['9', '5', '8', '3', '6', '4'] ['9', '5', '8', '4', '3', '6'] ['9', '5', '8', '4', '6', '3'] ['9', '5', '8', '6', '3', '4'] ['9', '5', '8', '6', '4', '3'] ['9', '6', '3', '4', '5', '8'] ['9', '6', '3', '4', '8', '5'] ['9', '6', '3', '5', '4', '8'] ['9', '6', '3', '5', '8', '4'] ['9', '6', '3', '8', '4', '5'] ['9', '6', '3', '8', '5', '4'] ['9', '6', '4', '3', '5', '8'] ['9', '6', '4', '3', '8', '5'] ['9', '6', '4', '5', '3', '8'] ['9', '6', '4', '5', '8', '3'] ['9', '6', '4', '8', '3', '5'] ['9', '6', '4', '8', '5', '3'] ['9', '6', '5', '3', '4', '8'] ['9', '6', '5', '3', '8', '4'] ['9', '6', '5', '4', '3', '8'] ['9', '6', '5', '4', '8', '3'] ['9', '6', '5', '8', '3', '4'] ['9', '6', '5', '8', '4', '3'] ['9', '6', '8', '3', '4', '5'] ['9', '6', '8', '3', '5', '4'] ['9', '6', '8', '4', '3', '5'] ['9', '6', '8', '4', '5', '3'] ['9', '6', '8', '5', '3', '4'] ['9', '6', '8', '5', '4', '3'] ['9', '8', '3', '4', '5', '6'] ['9', '8', '3', '4', '6', '5'] ['9', '8', '3', '5', '4', '6'] ['9', '8', '3', '5', '6', '4'] ['9', '8', '3', '6', '4', '5'] ['9', '8', '3', '6', '5', '4'] ['9', '8', '4', '3', '5', '6'] ['9', '8', '4', '3', '6', '5'] ['9', '8', '4', '5', '3', '6'] ['9', '8', '4', '5', '6', '3'] ['9', '8', '4', '6', '3', '5'] ['9', '8', '4', '6', '5', '3'] ['9', '8', '5', '3', '4', '6'] ['9', '8', '5', '3', '6', '4'] ['9', '8', '5', '4', '3', '6']

注意,以下方法是不行的,反例是v=948635,k=64,此時3684找不到下一個后繼3846,

所以不能從末尾往前掃交換4,而是應(yīng)該交換6,即從后往前第一對正序?qū)?/p> class Solution:def getMinSwaps(self, num: str, k: int) -> int:def getnext(nums):n = len(nums)ok = Falsefor i in range(n-1,-1,-1):if ok:breakfor j in range(i-1,-1,-1):if ok:breakif nums[j] < nums[i]:num[j],num[i] = num[i],num[j]ok = Truenums[j+1:n] = sorted(nums[j+1:n])return numstmp = list(num)num = list(num)n = len(num)ans = 0for i in range(k):num = getnext(num)print(num)for i in range(n):if tmp[i] == num[i]:continueprint(i)pos = -1for j in range(i+1,n):if num[j] == tmp[i]:pos = jbreakfor j in range(pos,i,-1):num[j],num[j-1] = num[j-1],num[j]ans += 1return ans ['9', '4', '8', '6', '5', '3'] ['9', '5', '3', '4', '6', '8'] ['9', '5', '3', '4', '8', '6'] ['9', '5', '3', '6', '4', '8'] ['9', '5', '3', '6', '8', '4'] ['9', '5', '4', '3', '6', '8'] ['9', '5', '4', '3', '8', '6'] ['9', '5', '4', '6', '3', '8'] ['9', '5', '4', '6', '8', '3'] ['9', '5', '4', '8', '3', '6'] ['9', '5', '4', '8', '6', '3'] ['9', '5', '6', '3', '4', '8'] ['9', '5', '6', '3', '8', '4'] ['9', '5', '6', '4', '3', '8'] ['9', '5', '6', '4', '8', '3'] ['9', '5', '6', '8', '3', '4'] ['9', '5', '6', '8', '4', '3'] ['9', '5', '8', '3', '4', '6'] ['9', '5', '8', '3', '6', '4'] ['9', '5', '8', '4', '3', '6'] ['9', '5', '8', '4', '6', '3'] ['9', '5', '8', '6', '3', '4'] ['9', '5', '8', '6', '4', '3'] ['9', '6', '3', '4', '5', '8'] ['9', '6', '3', '4', '8', '5'] ['9', '6', '3', '5', '4', '8'] ['9', '6', '3', '5', '8', '4'] ['9', '6', '4', '3', '5', '8'] ['9', '6', '4', '3', '8', '5'] ['9', '6', '4', '5', '3', '8'] ['9', '6', '4', '5', '8', '3'] ['9', '6', '4', '8', '3', '5'] ['9', '6', '4', '8', '5', '3'] ['9', '6', '5', '3', '4', '8'] ['9', '6', '5', '3', '8', '4'] ['9', '6', '5', '4', '3', '8'] ['9', '6', '5', '4', '8', '3'] ['9', '6', '5', '8', '3', '4'] ['9', '6', '5', '8', '4', '3'] ['9', '6', '8', '3', '4', '5'] ['9', '6', '8', '3', '5', '4'] ['9', '6', '8', '4', '3', '5'] ['9', '6', '8', '4', '5', '3'] ['9', '6', '8', '5', '3', '4'] ['9', '6', '8', '5', '4', '3'] ['9', '8', '3', '4', '5', '6'] ['9', '8', '3', '4', '6', '5'] ['9', '8', '3', '5', '4', '6'] ['9', '8', '3', '5', '6', '4'] ['9', '8', '4', '3', '5', '6'] ['9', '8', '4', '3', '6', '5'] ['9', '8', '4', '5', '3', '6'] ['9', '8', '4', '5', '6', '3'] ['9', '8', '4', '6', '3', '5'] ['9', '8', '4', '6', '5', '3'] ['9', '8', '5', '3', '4', '6'] ['9', '8', '5', '3', '6', '4'] ['9', '8', '5', '4', '3', '6'] ['9', '8', '5', '4', '6', '3'] ['9', '8', '5', '6', '3', '4'] ['9', '8', '5', '6', '4', '3'] ['9', '8', '6', '3', '4', '5'] ['9', '8', '6', '3', '5', '4'] ['9', '8', '6', '4', '3', '5']

?

總結(jié)

以上是生活随笔為你收集整理的洛谷P2525 Uim的情人节礼物·其之壱(组合数学/上一个全排列/下一个全排列)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 免费的黄色大片 | 国产精品视频福利 | xxx视频在线观看 | 九九热精品在线 | 9.1成人看片免费版 日韩经典在线 | 国产精品久久久91 | 丝袜ol美脚秘书在线播放 | 毛片基地视频 | 羞羞的网站在线观看 | 梦梦电影免费高清在线观看 | 欧美性一区二区 | 国产一区二区三区免费视频 | 国产精品不卡在线观看 | 欧美一级三级 | 成人高潮片免费 | 亚洲一级片网站 | 国产精品一区二区三区在线免费观看 | 97色在线视频| 爱情岛亚洲论坛入口福利 | 亚欧三级 | 成人午夜av在线 | 进去里视频在线观看 | 最新中文字幕第一页 | 婷婷亚洲视频 | 奇米狠狠去啦 | 美女精品视频 | 欧美18免费视频 | 中文字幕无人区二 | 中文资源在线播放 | 日韩精品一区二区三区四区五区 | 99精品在线观看视频 | 欧类av怡春院 | 国外成人性视频免费 | 中文字幕在线观看视频一区 | 亚洲天堂成人在线观看 | 中文国产字幕 | 国产日韩欧美在线播放 | 日韩少妇内射免费播放18禁裸乳 | 亚洲性生活大片 | 性爱免费在线视频 | 久久久久久久国产精品 | 日日日夜夜操 | 日日干,夜夜操 | 在线观看www| 视色av| 国产白浆一区二区 | 中国亚洲老头同性gay男男… | 国语对白做受欧美 | 美日韩一二三区 | 国产精品二区一区二区aⅴ污介绍 | 三级无遮挡 | 麻豆网站在线播放 | 国产在线123 | 欧美精品v| 国产黄色免费观看 | 日本熟妇浓毛 | 51久久久| 精品成人一区 | 熟妇人妻系列aⅴ无码专区友真希 | 欧美日韩性 | 波多野结衣中文一区 | 综合人人 | 曰本丰满熟妇xxxx性 | 国产精品久久久久久一区二区三区 | 日本打白嫩屁股视频 | 免费在线国产 | 成人免费午夜视频 | 天天插天天干 | 久久经典视频 | 国产色秀视频 | 91成人网页| 99久99| 久久一区国产 | 久久影院一区二区 | 日韩av在线一区 | 青草青草久热 | 亚洲国产精品成人综合 | 性淫bbwbbwbbw| 杨幂一区二区三区免费看视频 | 韩国av免费观看 | 内射后入在线观看一区 | 中文天堂在线视频 | 亚洲欲妇| 国产一区二区三区影视 | 久草精品在线观看 | 在线观看亚洲欧美 | 欧美日韩国产综合网 | 欧美视频一二三 | 毛片成人网 | 美女扒开腿让男生捅 | 老女人乱淫 | 国产嫩草在线观看 | 黄色精品网站 | 午夜少妇久久久久久久久 | 久久久久久久久久网站 | 免费人成在线观看网站 | 一级真人毛片 | 四虎影院色| 久久黄页 |