1 条题解

  • 0
    @ 2025-8-24 22:33:42

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar LoserCode
    我没猜错的话,我已经猜对了

    搬运于2025-08-24 22:33:42,当前版本为作者最后更新于2021-09-10 22:18:04,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    题意简述

    给出一字符串,判断其是否能与给定的字符串输入顺序相符。

    题目分析

    这种键盘问题通常要用到一个简单算法——构造数组,也就是大家所说的打表。

    打表(用空间换时间)————一般是指将所有需要用到的结果先计算出来,然后后面需要用到时就可以直接查表获得。

    那么本题所要保存的东西就是输入每个字母所需的按键,e.g.e.g. : 输入 aa 需要按 2 ,那么就记为 x[1]=2x [1] = 2 ,以此类推。

    如果这张表打好了,那么剩下的操作只剩下与给定的字符串比较,这里又有一个难点,输入的是字符串,要将其转化为数字比对,这里要用 ASCII 表。

    由表可知,需判断的小写字母字符串需要 a-a 也就是 97-97 可以得到十进制数字(也就是可以进行比较的),给定的字符串要 0-0 ,也就是 48-48 得到十进制数字。

    Code

    #include<bits/stdc++.h>
    using namespace std;
    int x[26]={2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,7,8,8,8,9,9,9,9};//构造数组
    char a[1001][1001],b[1001];
    int main()
    {
    	int n,ans=0,len=0;
    	cin>>n;
    	for(int i=1;i<=n;i++) cin>>a[i];
    	cin>>b;len=strlen(b);
    	for(int i=1;i<=n;i++)
    	{
    		int l=strlen(a[i]);
    		if(l==len)
    		{
    			bool flag=true;
    			for(int j=0;j<l;j++)if(x[a[i][j]-97]!=b[j]-48)
    			flag=false;	
    			if(flag)ans++;//判断并统计答案
    		}
    	}
    	cout<<ans;
    	return 0;
    }
    

    温馨提示:本题卡数组大小记得把数组开大点哦。

    • 1

    信息

    ID
    6845
    时间
    2000ms
    内存
    64MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者