2.28模拟题 problem1 判断三角形

题目描述
Shoutmon给萌萌兽出了一个题:给出三条线段的长度,问能否组成三角形。不过线段的长度是通过每一个数位的英文给出的。你能帮助萌萌兽吗?

输入
每个输入文件中一组数据。

分三行分别给出三条线段的长度。每行以一个整数N(1<=N<=5)开始,表示后面给出的单词个数;接下来跟着N个英文单词,每个单词表示一个数位,线段的长度由这些英文单词直接拼接而成(例如one two three代表123,one one代表11),每两个单词之间用一个空格隔开。数字0到9分别用下面十个单词表示:zero、one、two、three、four、five、six、seven、eight、nine。数据保证每条线段的长度都不为0。

输出
如果可以组成三角形,那么输出YES;否则输出NO。

样例输入
1 one
2 one one
3 one one one
样例输出
NO

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string>
#include <vector>
#include <queue>
#include <map>
using namespace std;
string numcode[] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
map<string, int> strToNum;
int main() {
int tri[3];
for (int i = 0; i < 10; i++) {
strToNum[numcode[i]] = i;
}
for (int i = 0; i < 3; i++) {
int k, number = 0;
scanf("%d", &k);
for (int j = 0; j < k; j++) {
char temp[10];
scanf("%s", temp);
number = number * 10 + strToNum[temp];
}
tri[i] = number;
}
if(tri[0] + tri[1] > tri[2] &&
tri[1] + tri[2] > tri[0] &&
tri[0] + tri[2] > tri[1] ){
printf("YES\n");
}else{
printf("NO\n");
}
return 0;
}