1,還有點小問題。
2,傳陣列的話只要傳陣列名就可以了。我都想重修c語言了。。
3,有點煩啊沒有輸出,好像也沒有結束那個符號。自己的問題!
4,
#include#includeusing
namespace
std;
const
int maxn=1005
;int
n;char
c[maxn];
char
t[maxn];
void solve(charc)
else
if(c[a+i]>c[b-i])
}if(left) putchar(c[a++]);//
這個是先輸出再自加
else putchar(c[b--]);}}
intmain()
5,但是我覺裡面那些細節條件我絕對沒搞清。
還有人家演算法思想是那樣,但是人家的實現真的很簡單的。
6,**細節看起來還是挺難理解的。不過不是說好的先背先抄**麼
7,你能出現這種錯誤說明你對**的理解太差了。。。這個錯誤我最終總結為。。。嗯。。題意的問題啊。是要加到尾部!!!
而且是字典序盡可能小的好不!
8,我來們費大
其實我覺得可以用選數的if-else來解釋。但是這樣的話,會產生更多的時間複雜度和空間。雖然它這個思想確實是這個樣子。我去我第二步都沒有做完全。。oj上是compiler error 和 presentation error。。。我真是的。
9,碰上問題不要急,乙個方法試了幾下就要去找其他方法。
比如這個坑爹。。原題還有條件呢。。行了費大。就選數的那個if-else那種結構思想。
10,至於**細節,我很推薦你去用樣例然後在紙上模擬一遍這樣我會有乙個好的理解~!
11,費大還是不好。為什麼呢?你想每次從原字串首尾取字典序最小的,是否考慮了相等的情況,相等的情況下又該怎麼設計程式。原題意不就是這樣嗎?據我所感覺,一般的題都有坑,像這個往前進一步,將字串反轉來比較,確實解決了。不過我突然又覺得相等無所謂?
還是有點思維難度的吧?但是,相等是有所謂的,因為我們基於的是求字典序最小的字串,因此我們要盡早地使用更小的字元。我之前還確實沒有認識到這點。k
一串本身就帶有乙個可比較屬性的東西。可以想象成數字?抽象出來這個題這個東西的本質上的東西,其實就是比較它們所代表的數字。
所以這個就叫數字比較問題。這個費大還可以。
12,至於費小,用樣例模擬了一下,倒是幾個點都比較明確了。
不過你改不了**的話,那就還是不行。。。
while(a<=b)//因為你要比較兩邊嘛,a<=b還是可以的
else
if(c[a+i]>c[b-i])
//中間這一大部分就是正常情況以及有首尾相等的話看下乙個
}
不清楚的話最好用樣例在紙上模擬一遍就清楚了。當然這是不夠的!
嗯我改了,果然for中的a+i<=b是承接上面的a=b的。然後我改成a+i<=b也過了 哈哈。
我覺得這個算數哈哈
13,
#includeusingnamespace
std;
const
int maxn=100005
;int
n;char
s[maxn];
int cnt=0
;void solve(char
c)
else
if(c[a+i]>c[b-i])
//中間這一大部分就是正常情況以及有首尾相等的話看下乙個
}
if(left) cout<];
else cout<];
if(cnt % 80 == 0
) cout
<}
}int
main()
14,
字典序問題
碰到過很多求關於字典序的問題,一直都是用的c 的stl庫中的函式水過的,今天終於有機會,算是對字串字典序問題的乙個總結吧。如果已知乙個字串 abc 為了更直觀,我們把建立如下對映 a 1 b 2 c 3 我們把這三個字母的所有排列都寫出來,有 序號字串 對映數字 1abc 1232 acb132 3...
字典序問題
字典序問題,給定乙個長度不超過6的小寫字母公升序字串 字串中的字元相對順序和字母表中的順序一致 迅速計算出在字典中的編碼,字典如 1 2 3 26 27 28 a b c z ab ac 總體思路為先計算出給定字串前所有的個數,然後再加一 include include 計算從i開始的長度為k的所有...
字典序問題
在資料加密和資料壓縮中需要對特殊的字串進行編碼。給定的字母表由26個小寫字母組成。該字母表產生的公升序字串是指字串中字母從左到右出現的次序與字母在字母表中出現的次序相同,且每個字元最多出現1次。例如,a,b,ab,bc,xyz等都是公升序字串。現在對字母表中產生的所有長度不超過6的公升序字串按照字典...