FZU 2111 的一點思考

2022-07-15 13:39:13 字數 1039 閱讀 8387

感覺題目有點問題,作一點**,有問題的地方歡迎指出。

解答1:

解答2出自部落格:(詳細**略)

考慮如下一組測試資料

97865432111 3

雖然都是ac**,但是兩者出現了截然不同的輸出

解答1輸出  11165432879

解答2輸出  11165432978

這種情況作為一道正式比賽題目(「高教社杯」第三屆福建省大學生程式設計競賽)是不可理解的。

首先按照題目意思來解釋這個測試資料:

原始數字串為97865432111,最多進行3次操作,我們可以任意選取滿足條件$1≤i

很顯然,我們可以將第1位9和最後一位1($i=1,j=11$)交換得到17865432119,

再將第2位的7和倒數第三位的1($i=2,j=9$)交換得到11865432719,

最後將第三位的8與倒數第二位的1($i=3,j=10$)交換,得到11165432789,這應該是最小的數。

這裡使用貪心策略時,很顯然要保證開始的數字是最小的;因此我們讓$i$從0遞增,每次選取串中最小的元素$a[r]∈a$,將其與$a[i]$進行交換。問題在於,如果存在著$t$個重複的元素$a[r_1]=a[r_2]=...=a[r_t]=min\$(這裡設$r_n$是遞增的),究竟應該將其與哪乙個交換?這兩個ac的程式顯然沒有做出回答。解答1將其與倒序的,也就是$r_t$交換,而解答2將其與正序的,也就是$r_1$交換。事實上,具體應該交換的次序,取決於$r_k(1≤k≤t)$的位置。設需要交換的數為$a[i_1]t$,則需要考慮與其相比次小的元素進行相應的操作。

在上面兩種解答中,無論是從正向還是反向,都不能保證交換後是最小的。看了vjudge的leaderboard的好幾份**,都沒考慮到最小值重複的問題,題目資料給出$n_=1000$,$a[i]∈\$,怎麼可能沒有重合的最小值?

遞迴的一點思考

廢話不說,直接上 searchtree delete int x,searchtree t else if t left null 沒有兒子的情況也包含了,因為t right 為null else else if x t element t right delete x,t right else t...

一點BPXA的思考

懂的人自然懂。bpxa功能配置 這個概念現在還有印象,記錄下來 一,bpxa是用於bp使用第三方資源的。如使用oracle資料庫,就是在xa裡配置。它的特徵是以開頭 二,bpxa有自己的kcxp佇列。這個佇列是自己的,還是寄生在已有的kcxp佇列中,無影響。三,bpxa在配置kcbp之間的交換資源時...

一點BPXA的思考

懂的人自然懂。bpxa功能配置 這個概念現在還有印象,記錄下來 一,bpxa是用於bp使用第三方資源的。如使用oracle資料庫,就是在xa裡配置。它的特徵是以開頭 二,bpxa有自己的kcxp佇列。這個佇列是自己的,還是寄生在已有的kcxp佇列中,無影響。三,bpxa在配置kcbp之間的交換資源時...