瑞神今年大三了,他在寒假學會了英文的26個字母,所以他很興奮!於是他讓他的朋友tt考考他,tt想 到了乙個考瑞神的好問題:給定乙個字串,從裡面尋找連續的26個大寫字母並輸出!但是轉念一想, 這樣太便宜瑞神了,所以他加大了難度:現在給定乙個字串,字串中包括26個大寫字母和特殊字 符』?』,特殊字元』?'可以代表任何乙個大寫字母。現在tt問你是否存在乙個位置連續的且由26個大寫字 母組成的子串,在這個子串中每個字母出現且僅出現一次,如果存在,請輸出從左側算起的第乙個出現 的符合要求的子串,並且要求,如果有多組解同時符合位置最靠左,則輸出字典序最小的那個解!如果 不存在,輸出-1! 這下hrz矇圈了,他剛學會26個字母,這對他來說太難了,所以他來求助你,請你幫 他解決這個問題,報酬是可以幫你打守望先鋒。
說明:字典序 先按照第乙個字母,以 a、b、c……z 的順序排列;如果第乙個字母一樣,那麼比較第二 個、第三個乃至後面的字母。如果比到最後兩個單詞不一樣長(比如,sigh 和 sight),那麼把短者排 在前。例如
ab??efghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abdcefghijklmnopqrstuvwxyz
上面兩種填法,都可以構成26個字母,但是我們要求字典序最小,只能取前者。
注意,題目要求的是 第乙個出現的,字典序最小的!
輸入只有一行,乙個符合題目描述的字串
輸出只有一行,如果存在這樣的子串,請輸出,否則輸出-1
abc?
?fghijk?
??opqr?tuvwxy?
abcdefghijklmnopqrstuvwxyz
aabcdefghijklmnopqrstuvw?
?m
-
1
時間限制
1s空間限制
64mb
資料點字串長度
1,2,3
264,5,6
1047,8,9,10
106用類似尺取的方法,有乙個左指標和右指標,區間內長度為26,每次移動一格。用長度為26的letter陣列來記錄目前區間中分別含有26個字母的個數,用wenhao來記錄目前區間中含有』?『的個數。
一開始取前26個字母,並計算出這26個字母中的letter陣列和wenhao,並判斷這26個字母能否符合要求。不符合則r和l右移,進入迴圈。進入while迴圈後,先將l-1處的字母在letter陣列或wenhao中刪除,再將r處的字母計入letter陣列或wenhao。然後判斷這26個字母能否符合要求。不符合則r和l右移,進入下一次迴圈。迴圈直至r>n時結束。
判斷某26個字母是否符合要求時,判斷letter陣列中是否所有元素小於1即可。若滿足這個條件,需要將最小序列輸出。輸出時,首先迴圈letter陣列,將letter陣列中為0的元素插入陣列v中(這段字串中沒有這個元素,這些元素的順序可變);然後對v排序,使字典序小的元素在前;然後迴圈l到r區域,輸出相應字母,』?'處有序輸出相應的v陣列中的元素。一旦判斷成功後,輸出後直接結束程式即可。執行到程式末尾則證明沒有符合要求的元素,輸出-1。
#include #include #include #include #include using namespace std;
char a[1000100];
int letter[26];
int wenhao=0;
vectorv;
int main(int argc, char** ar**)
letter[a[i]-'a']++;
} //判斷前26個
bool suc=1;
for(int i=0;i<26;i++)
} if(!suc)
else
} sort(v.begin(),v.end());
int tot=0;
for(int i=l;i<=r;i++)else
} printf("\n");
return 0;
} while(r1)
} if(!suc)
else
}sort(v.begin(),v.end());
int tot=0;
for(int i=l;i<=r;i++)else
}printf("\n");
return 0;
} }printf("-1\n");
return 0;
}
week8 CSP模擬B HRZ學英語
給定乙個只含26個大寫英文本母和 的字串,找出乙個連續的且由26個大寫字母組成的串,在這個子串中每個字母都只出現一次 可以當做任何字母 如果有,輸出最靠左且字典序最小的子串 如果沒有 輸出 1 input 乙個字串 len 106 output 子串或 1 sample input 1 abc?fg...
Week8 CSP模擬 T1HRZ的序列
相較於咕咕東,瑞神是個起早貪黑的好孩子,今天早上瑞神起得很早,刷b站時看到了乙個序列a,他對這個序列產生了濃厚的興趣。他好奇是否存在乙個數k,使得一些數加上k,一些數減去k,一些數不變,使得整個序列中所有的數相等。其中對於序列中的每個位置上的數字,至多只能執行一次加運算或減運算或是對該位置不進行任何...
程式設計思維(CSP模擬題)B HRZ 學英語
瑞神今年大三了,他在寒假學會了英文的26個字母,所以他很興奮!於是他讓他的朋友tt考考他,tt想到了乙個考瑞神的好問題 給定乙個字串,從裡面尋找 連續的26個大寫字母 並輸出!但是轉念一想,這樣太便宜瑞神了,所以他加大了難度 現在給定乙個字串,字串中包括26個大寫字母和特殊字元 特殊字元 可以代表任...