zoukankan      html  css  js  c++  java
  • 17-10-05模拟赛

    T1:考虑数据合法性与美丽串的定义,可知其要求每个字符与其前两个字符不同。

    考虑从后往前贪心,找该字母后第一个可以替换的字母,若未找到则向前查找,对于替换字母后的字母贪心构造。

    Code:

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 #define MN 100005
     5 using namespace std;
     6 inline int in(){
     7     int x=0;bool f=0; char c;
     8     for (;(c=getchar())<'0'||c>'9';f=c=='-');
     9     for (x=c-'0';(c=getchar())>='0'&&c<='9';x=(x<<3)+(x<<1)+c-'0');
    10     return f?-x:x;
    11 }
    12 char ch[MN],s[MN];
    13 int n,p,pos,ps;
    14 bool vis[30];
    15 inline int dfs(int x){
    16     if (x<0) return -2;
    17     for (int i=0;i<p;++i) vis[i]=0;
    18     for (int i=1;i<=2;++i) if (x-i>=0) vis[s[x-i]-'a']=1;    
    19     for (int i=(s[x]-'a'+1);i<p;++i) if (!vis[i]) {pos=x;ch[x]=i+'a';break;}
    20     return pos==-1?dfs(x-1):pos;
    21 }
    22 int main()
    23 {
    24     n=in();p=in();pos=-1;
    25     scanf("%s",s);ps=dfs(n-1);
    26     if (ps==-2) {printf("NO");return 0;}
    27     for (int i=0;i<ps;++i) ch[i]=s[i];
    28     for (int j=ps+1;j<n;++j){
    29         for (int i=0;i<p;++i) vis[i]=0;
    30         for (int i=1;i<=2;++i) if (j-i>=0) vis[ch[j-i]-'a']=1;
    31         for (int i=0;i<p;++i) if (!vis[i]) {ch[j]=i+'a';break;}
    32         if (!ch[j]) {printf("NO");return 0;}
    33     }printf("%s",ch);return 0;
    34 }
  • 相关阅读:
    表变量与临时表
    表单提交原理
    C_Free引用链接库
    禁用ViewState(转)
    jquery设置元素的readonly和disabled
    WebService经验分享
    如何给GridView添加滚动条 收藏
    bcp+Sql语句抽取数据导出
    List<T>的排序
    AppDomain与动态加载程序集
  • 原文地址:https://www.cnblogs.com/codingutopia/p/test171005.html
Copyright © 2011-2022 走看看