zoukankan      html  css  js  c++  java
  • [ZPG TEST 114] 阿狸的英文名【水题】

    1. 1.      阿狸的英文名

     

    阿狸最近想起一个英文名,于是他在网上查了很多个名字。他发现一些名字可以由两个不同的名字各取一部分得来,例如John(约翰)的前缀 “John”和Robinson(鲁滨逊)的后缀 “son” 连在一起就是Johnson.

     

    现在他找到了两个喜欢的名字(名字可看作字符串),用A和B表示,他想知道取A的一个非空前缀和B的一个非空后缀,连接在一起能组成多少不同的字符串。

     

    输入格式

           输入两行,分别表示字符串A和B;字符串只包含小写英文字母。

    输出格式

           输出一行,一个整数,表示能得到多少不同的字符串。

    输入样例

    输出样例

    cat

    dog

    9

    tree

    heap

    14

    数据范围和约束:

           30%的数据:字符串长度不超过2000

           100%的数据:字符串长度不超过100000

    题解说这是一道签到题。。。大爷的我居然爆0。。。

    其实就是水题一道,统计A串中除了首字母的其它字母出现次数,统计B串中除了尾字母的其它字母出现次数,然后用总方案数减去那些重复了的。

    #include <cstdio>
    #include <cstring>
    
    const int maxn = 100005;
    
    int n, m;
    char a[maxn], b[maxn];
    long long s[2][26], ans;
    
    inline long long getnum(int left, int right, char ch) {
    	if (left <= 0) {
    		left = 1;
    	}
    	return s[right][ch - 'a'] - s[left - 1][ch - 'a'];
    }
    /*
    interesting
    veryexciting
    */
    
    int main(void) {
    	scanf("%s%s", a + 1, b + 1);
    	n = strlen(a + 1);
    	m = strlen(b + 1);
    	ans = (long long)n * (long long)m;
    	for (int i = 2; i <= n; ++i) {
    		++s[0][a[i] - 'a'];
    	}
    	for (int i = 1; i < m; ++i) {
    		++s[1][b[i] - 'a'];
    	}
    	for (int i = 0; i < 26; ++i) {
    		ans -= s[0][i] * s[1][i];
    	}
    	printf("%lld
    ", ans);
    	return 0;
    }
    

      

  • 相关阅读:
    mybatis中大于等于小于等于的写法
    RandomAccess接口
    ArrayList源码解析
    使用Docker搭建MySQL主从复制(一主一从)
    狂神Docker视频学习笔记(基础篇)
    【JQ】jQuery实现将div中滚动条滚动到指定位置的方法
    JAVA线程池的基本使用
    史上最全的Java技术体系思维导图,没有之一!
    springboot整合kafka
    spring cloud alibaba 分布式事务解决方案之seata-1.3.0
  • 原文地址:https://www.cnblogs.com/ciao-sora/p/6055815.html
Copyright © 2011-2022 走看看