zoukankan      html  css  js  c++  java
  • 牛牛的字符对

    牛牛的字符对

    题目描述

    牛牛有一个长度为n的字符串,牛牛想知道有多少对(i ,j,k)满足 1<=i < j < k<=n,且S[i] = S[j] = S[k]?由于答案可能很大,你只需输出答案对1e9+7取模。

    输入格式

    第一行,一个正整数n,代表字符串的长度(1<=n<=100000)

    第二行,一个长度为n的字符串S(字符串仅由小写字母组成)。

    样例

    输入#1                                          输出#1

    7                                                   5

    abababa

    题解:这一题题意比较简单,一看就知道可以三重for循环来做,结果WA了,仔细看一下可以知道,这个的长度太长了,肯定会TLE,这里我们可以用map来做,记录每一种字母出现的次数,然后利用排列组合即可,注意要取模。

    代码:

    #include<iostream>
    #include<cstring>
    #include<map>
    #include<algorithm>
    #define ll long long
    using namespace std;
    const ll mod=1e9+7;
    int main(){
        int n;
        string ptr;
        cin>>n;
        cin>>ptr;
        map<char,ll> mp;
        for(int i=0;i<ptr.length();i++){
            mp[ptr[i]]++;//某一种有多少个 
        }
        map<char,ll>::iterator it;
        ll sum=0;
        for(it=mp.begin();it!=mp.end();it++){
            ll t=it->second;
            if(t>=3){
                sum=sum%mod+((t*(t-1)*(t-2))/6)%mod; 
            }
        }
        cout<<sum%mod<<endl;
        return 0;
    }
  • 相关阅读:
    ModelSim中Altera仿真库的添加
    0欧电阻之作用
    Modelsim之时序仿真
    FPGA之常见错误
    【转】VCC、VDD、VEE、VSS应用
    FROM 子句一个或多个派生表
    asp.net笔记
    GridView分页,个人认为比较简单的。
    GridView中模拟RadioButton组代码
    SPSWC:SearchBoxEx控件
  • 原文地址:https://www.cnblogs.com/blogxsc/p/12710840.html
Copyright © 2011-2022 走看看