zoukankan      html  css  js  c++  java
  • Wannafly挑战赛28B(DP,思维,字符串)

    #include<bits/stdc++.h>
    using namespace std;
    int n;
    int nxt[3][100007];
    char buff[100007];
    const char *seq="msc",*pat[8]={"022012","020212","002212","012022","020122","002122","010222","001222"};
    int main(){
        scanf("%d%s",&n,buff);
        nxt[0][n]=nxt[1][n]=nxt[2][n]=n;
        for(int i=n-1;i>=0;i--)
            for(int j=0;j<3;j++)
                nxt[j][i]=buff[i]==seq[j]?i:nxt[j][i+1];//记录字母最靠前出现的位置
        long long ans=0;
        for(int i=0;i<n;i++){//枚举起点
            int low=n;
            for(int j=0;j<8;j++){//遍历八种组合情况
                int pos=i-1;//因为下面都是从pos+1开始找所以这里将pos设置为i-1用来抵消第一次的+1
                for(int k=0;pos<n&&k<6;k++)
                    pos=nxt[pat[j][k]-'0'][pos+1];//记录出现的位置
                low=min(low,pos);//取最近的可能以便留出更多的空间给终点
            }
            ans+=n-low;//每一个起点对应的n-low种终点
        }
        printf("%lld",ans);
        return 0;
    }

    保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
  • 相关阅读:
    降维
    latex 中文
    Java基础——通信
    Java基础——文件读取
    Java基础——哈弗曼树的Java实现(构建、遍历输出、哈弗曼编码)
    Java基础——表达式二叉树的Java实现构建(构建+前序、中序、后序遍历)
    MYSQL和ORACLE的一些区别
    快速排序
    冒泡排序
    希尔排序
  • 原文地址:https://www.cnblogs.com/ldudxy/p/10457643.html
Copyright © 2011-2022 走看看