zoukankan      html  css  js  c++  java
  • ACM_查找ACM(加强版)

    查找ACM(加强版)

    Time Limit: 2000/1000ms (Java/Others)

    Problem Description:

    作为一个acmer,应该具备团队合作能力和分析问题能力。给你一个只有a,c和m的字符串,你要依次取3个字母使之恰好为acm。 比如串 accmmmca 你可以取 12345678 
    ac_m____ 
    ac__m___ 
    ac___m__ 
    a_cm____ 
    a_c_m___ 
    a_c__m__共6种。
    
    你只要给出给你的串有多少种方案能组成acm。

    Input:

    输入包含多组测试,对于每组测试,输入一个只有acm3种字母的串(长度<=200000)

    Output:

    对于每组测试,输出一个整数一行,表示给你的串有多少种方案能组成acm。

    Sample Input:

    accmmmca

    Sample Output:

    6
    解题思路:先打表每个字符下,前面'a'的个数,然后从后往前遍历,计算'm'的个数,当遇到字符'c'时,即将前面'a'的个数cnt[i]乘以后面'm'的个数,迭代计算,但要注意的是两数相乘会爆int,所以先强转成long long,再做计算,这样就不会爆int了。
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int N = 200005;
     4 typedef long long LL;
     5 char s[N];
     6 int cnt[N];
     7 int main()
     8 {
     9     while(cin>>s){
    10         int a=0,m=0,len=strlen(s);
    11         for(int i=0;i<len;++i){
    12            if(s[i]=='a')a++;
    13            cnt[i]=a;
    14         }
    15         LL ans=0;
    16         for(int i=len-1;i>=0;--i){
    17             if(s[i]=='m')++m;
    18             if(s[i]=='c')ans+=(LL)m*cnt[i];
    19         }
    20         cout<<ans<<endl;
    21     }
    22     return 0;
    23 }
     
  • 相关阅读:
    资料存储
    Django学习
    爬虫学习
    time()模块
    一些功能性小程序段
    装饰器
    函数的知识点(理解难点剖析)
    linux中的回收站机制,防止rm -rf 事件
    python--列表解析式 -- 知识整理
    python- 时间模块 datatime 知识整理
  • 原文地址:https://www.cnblogs.com/acgoto/p/8977684.html
Copyright © 2011-2022 走看看