題目描述
給出乙個序列,這個序列中每乙個元素要麼是乙個英文單詞,要麼是乙個整數。除了最後乙個元素,每乙個元素後面有乙個逗號,再根乙個空格。最後乙個元素後面有乙個句號。題解:現在要對這個序列進行排序,把所有的單詞按照字典序公升序排序,所有的整數按照公升序排序。並且保持原來是整數的位置還是整數,原來是單詞的位置還是單詞。單詞比較的時候忽略大小寫。
輸入單組測試資料。
輸入若干個元素,對於單詞,非空且長度不超過10,只由大小寫字母組成;對於整數,絕對值<=1000000。元素個數不超過10000,序列中至少有乙個元素。
輸出輸出排序之後的序列。按照輸入的格式。
輸入樣例
樣例輸入1
banana, strawberry, orange.
樣例輸入2
banana, strawberry, orange.
輸出樣例
樣例輸出1
banana, orange, strawberry.
樣例輸出2
banana, orange, strawberry.
這是一道模擬題,我覺得不算難,但是也不算簡單,我的思路:首先輸入每個元素作為乙個結構體vec,結構體儲存四個資訊:編號、識別符號(單詞or整數)、string單詞,int整數。
這裡有三個要注意的點:1. 元素為數字時可能是負數,開頭為
-
。2. 整數的位數可能不止一位。3. 要儲存下每個元素的序號,也就是要記錄下編號到結構體中,原因下面會說。
然後另外開兩個結構體,乙個是單詞結構體word,乙個是整數結構體data,遍歷一次全部元素的結構體即可,這樣做的原因就是方便分別排序,因為單詞和整數不能排序。這裡也有乙個要注意的點:對單詞進行排序的時候,是忽略大小寫的,所以我在cmp_s()裡面把單詞轉成了小數(但是因為傳進去的是值,所以根本不用擔心把結構體的大小寫改變了。)
做完了上述兩步後,開乙個結果結構體res,用來儲存最後的結果,從0遍歷到n-1,**:如果是在vec結構體中是單詞,則按單詞的順序word_cnt(從小到大)進入res,
如果在vec結構體中是整數,則按整數的順序data_cnt(從小到大)進入res。
注意:我覺得這一步很關鍵,因為題目要求原來是單詞的位置還是單詞,原來是整數的位置還是整數。
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f;
const ll inf = 0x3f3f3f3f3f3f3f3f;
const double pi = acos(-1.0);
const double e = exp(1.0);
const int mod = 1e9+7;
const int max = 1e5+5;
struct elem
;vector vec;// 存放起始元素
vector word;// 存放vec中的單詞
vector data;// 存放vec中的整數
vector res;// 存放排序後的結果
int cmp_s(elem a,elem b)
for(int i = 0; i < b.word.length(); i++)
return a.word < b.word;
}int cmp_d(elem a,elem b)
int main()
else
tmp.num = cnt; cnt++;
vec.push_back(tmp);
if(str[(int)str.length()-1] == '.')
}for(int i = 0; i < vec.size(); i++)
else
}sort(word.begin(),word.end(),cmp_s);
sort(data.begin(),data.end(),cmp_d);
int word_cnt = 0;
int data_cnt = 0;
for(int i = 0; i < vec.size(); i++)
else
}for(int i = 0; i < res.size(); i++)
else
if(i != cnt-1)
else
}return 0;
}
51Nod 1241 特殊的排序
題目傳送門 分析 之前想的是求lis,後面發現這組資料會出問題 3 1 2 4 5 6。其實這裡的lis還應當滿足前後兩個元素的值相差為1。比如上面的最長子串行為 3 4 5 6,而不是1 2 4 5 6。即只需移動1 2即可。即如果n個數最長連續上公升子串行 這裡的連續指數值上連續,即前後相差1 ...
51nod 1241 特殊的排序
1241 特殊的排序 基準時間限制 1 秒 空間限制 131072 kb 分值 80 難度 5級演算法題 乙個陣列的元素為1至n的整數,現在要對這個陣列進行排序,在排序時只能將元素放在陣列的頭部或尾部,問至少需要移動多少個數字,才能完成整個排序過程?例如 2 5 3 4 1 將1移到頭部 1 2 5...
51Nod 1241 特殊的排序
乙個陣列的元素為1至n的整數,現在要對這個陣列進行排序,在排序時只能將元素放在陣列的頭部或尾部,問至少需要移動多少個數字,才能完成整個排序過程?例如 2 5 3 4 1 將1移到頭部 1 2 5 3 4 將5移到尾部 1 2 3 4 5 這樣就排好了,移動了2個元素。給出乙個1 n的排列,輸出完成排...