感觉这道题好毒~~


这道题为了偷懒,L_Y_T决定用map

就是用map来预处理烦人的字符

	data["one"] = 1 , data["two"] = 4 , data["three"] = 9 , data["four"] = 16 ;
	data["five"] = 25 , data["six"] = 36 , data["seven"] = 49 , data["eight"] = 64 ;
	data["nine"] = 81 , data["ten"] = 0 , data["eleven"] = 11*11%100 , data["twelve"] = 12*12%100 ;
	data["thirteen"] = 13*13%100 , data["fourteen"] = 14*14%100 , data["fifteen"] = 15*15%100 ;
	data["sixteen"] = 16*16%100 , data["seventeen"] = 17*17%100 , data["eighteen"] = 18*18%100 ;
	data["nineteen"] = 19*19%100 , data["twenty"] = 0 , data["a"] = 1 , data["both"] = 4 ;
	data["another"] = 4 , data["first"] = 1 , data["second"] = 4 , vis["third"] = 9 ;
	vis["one"] = 1 , vis["two"] = 1 , vis["three"] = 1 , vis["four"] = 1 ;
	vis["five"] = 1 , vis["six"] = 1 , vis["seven"] = 1 , vis["eight"] = 1 ;
	vis["nine"] = 1 , vis["ten"] = 1 , vis["eleven"] = 1 , vis["twelve"] = 1 ;
	vis["thirteen"] = 1 , vis["fourteen"] = 1 , vis["fifteen"] = 1 ;
	vis["sixteen"] = 1 , vis["seventeen"] = 1 , vis["eighteen"] = 1 ;
	vis["nineteen"] = 1 , vis["twenty"] = 1 , vis["a"] = 1 , vis["both"] = 1 ;
	vis["another"] = 1 , vis["first"] = 1 , vis["second"] = 1 , vis["third"] = 1 ;

其中data是来存平方%100后的数值,vis是来处理当前字符串是不是代表数字的字符串

然后就进行处理就行了

下面放代码(详解在代码中)

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <map>
#include <vector>

using namespace std ;
map<string,int>data , vis;//上面有解释
vector<int>ans ;//答案数组
int main () {
	data["one"] = 1 , data["two"] = 4 , data["three"] = 9 , data["four"] = 16 ;
	data["five"] = 25 , data["six"] = 36 , data["seven"] = 49 , data["eight"] = 64 ;
	data["nine"] = 81 , data["ten"] = 0 , data["eleven"] = 11*11%100 , data["twelve"] = 12*12%100 ;
	data["thirteen"] = 13*13%100 , data["fourteen"] = 14*14%100 , data["fifteen"] = 15*15%100 ;
	data["sixteen"] = 16*16%100 , data["seventeen"] = 17*17%100 , data["eighteen"] = 18*18%100 ;
	data["nineteen"] = 19*19%100 , data["twenty"] = 0 , data["a"] = 1 , data["both"] = 4 ;
	data["another"] = 4 , data["first"] = 1 , data["second"] = 4 , vis["third"] = 9 ;
	vis["one"] = 1 , vis["two"] = 1 , vis["three"] = 1 , vis["four"] = 1 ;
	vis["five"] = 1 , vis["six"] = 1 , vis["seven"] = 1 , vis["eight"] = 1 ;
	vis["nine"] = 1 , vis["ten"] = 1 , vis["eleven"] = 1 , vis["twelve"] = 1 ;
	vis["thirteen"] = 1 , vis["fourteen"] = 1 , vis["fifteen"] = 1 ;
	vis["sixteen"] = 1 , vis["seventeen"] = 1 , vis["eighteen"] = 1 ;
	vis["nineteen"] = 1 , vis["twenty"] = 1 , vis["a"] = 1 , vis["both"] = 1 ;
	vis["another"] = 1 , vis["first"] = 1 , vis["second"] = 1 , vis["third"] = 1 ;//以上为预处理
	for(int i = 1 ; i <= 6  ; i ++) {
		string op ;
		cin >> op ;
		if(vis[op]) ans.push_back(data[op]) ;//如果是代表数字的字符串,就加入ans
	}
	sort(ans.begin(),ans.end()) ;//暴力排序
	if(!ans.size()) cout << "0\n" ;//特判没有数的情况
  	for(int i = 0 ; i < ans.size() ; i ++) {
		if(ans[i] < 10 && i != 0) cout << "0" ;//如果不足两位数且不是第一位,输出前导零
		cout << ans[i] ; 
	}cout << endl ;
	return 0 ;
} 

感觉打了一个线段树的长度