此文章可以使用目录功能哟↑(点击上方[+])
CSU Problem 1100 一二三
Accept: 0 Submit: 0
Time Limit: 1 Sec Memory Limit : 128 MB
Problem Description
你弟弟刚刚学会写英语的一(one)、二(two)和三(three)。他在纸上写了好些一二三,可惜有些字母写错了。已知每个单词最多有一个字母写错了(单词长度肯定不会错),你能认出他写的啥吗?
Input
第一行为单词的个数(不超过10)。以下每行为一个单词,单词长度正确,且最多有一个字母写错。所有字母都是小写的。
Output
对于每组测试数据,输出一行,即该单词的阿拉伯数字。输入保证只有一种理解方式。
Sample Input
3
owe
too
theee
owe
too
theee
Sample Output
1
2
3
2
3
Hint
Problem Idea
解题思路:
【题意】
给你一个单词,可能写错了一个字母
问这个单词最有可能代表的是数字1,2,3里的哪一个
【类型】
水题
【分析】
因为题目说单词长度肯定不会错,所以我们可以优先判断"three"
毕竟,"one","two","three"中,只有"three"单词长度为5,另两个单词长度只有3
之后,我们只需要判断单词中'o','n','e'这三个字母出现了几个
因为每个单词最多写错一个字母,只要'o','n','e'中至少有两个字母出现,那这个单词必定是"one"
否则是"two"
【时间复杂度&&优化】
O(strlen(s))
题目链接→CSU Problem 1100 一二三
Source Code
/*Sherlock and Watson and Adler*/
#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<queue>
#include<stack>
#include<math.h>
#include<vector>
#include<map>
#include<set>
#include<bitset>
#include<cmath>
#include<complex>
#include<string>
#include<algorithm>
#include<iostream>
#define eps 1e-9
#define LL long long
#define PI acos(-1.0)
#define bitnum(a) __builtin_popcount(a)
using namespace std;
const int N = 26;
const int M = 2005;
const int inf = 1000000007;
const int mod = 1000003;
char s[N];
int c[N];
int main()
{int t,i;scanf("%d",&t);while(t--){scanf("%s",s);if(strlen(s)==5){puts("3");continue;}memset(c,0,sizeof(c));for(i=0;s[i]!='\0';i++)c[s[i]-'a']=1;if(c['o'-'a']+c['n'-'a']+c['e'-'a']>=2)puts("1");elseputs("2");}return 0;
}
菜鸟成长记