当前位置: 代码迷 >> 综合 >> CSU Problem 1100 一二三——湖南省第七届大学生计算机程序设计竞赛
  详细解决方案

CSU Problem 1100 一二三——湖南省第七届大学生计算机程序设计竞赛

热度:7   发布时间:2023-12-12 09:50:32.0

此文章可以使用目录功能哟↑(点击上方[+])

 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

 Sample Output

1
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;
}
菜鸟成长记

  相关解决方案