洛谷精选 - 字符串合集

https://www.luogu.org/problemnew/lists?name=&orderitem=difficulty&tag=2&content=0&select=1&type=


P1000 超级玛丽游戏

做过了,而且很无聊。


P2562 Kitty猫基因编码

又一个无聊题,题目的数据范围还错。

#include<bits/stdc++.h>
using namespace std;
#define ll long long

char s[261];
char ans[261];
int top;

void check(int b,int l){
    int all0=1,all1=1;
    for(int i=b;i<b+l;i++){
        if(s[i]=='0')
            all1=0;
        else
            all0=0;

        if(all1==0&&all0==0){
            break;
        }
    }
    if(all0)
        ans[top++]='A';
    else if(all1)
        ans[top++]='B';
    else{
        ans[top++]='C';
        check(b,l/2);
        check(b+l/2,l/2);
    }
    //printf("%s\n",ans);
}

void solve(){
    while(~scanf("%s",s)){
        top=0;
        int n=strlen(s);
        check(0,n);
        ans[top++]='\0';
        printf("%s\n",ans);
    }
}




int main(){
#ifdef Yinku
    freopen("Yinku.in","r",stdin);
    //freopen("Yinku.out","w",stdout);
#endif // Yinku
    solve();
}
View Code

P2543 奇怪的字符串

模板的最长公共子序列会MLE,所以应该考虑更神奇的做法。

这个字符串明显只有0和1两种情况?

看了题解原来可以用滚动数组,从dp的方程可以推出来。

小心越界。(从1开始就没这么多破事)

#include<bits/stdc++.h>
using namespace std;
#define ll long long

char a[10005];
char b[10005];

int dp[2][10005];

int lcs(int al,int bl){
    for(int i=0;i<al;i++){
        for(int j=0;j<bl;j++){
            dp[i%2][j]=(a[i]==b[j])?(((i&&j)?dp[(i-1)%2][j-1]:0)+1):max(i?dp[(i-1)%2][j]:0,j?dp[i%2][j-1]:0);
        }
    }
    return dp[(al-1)%2][bl-1];
}

void solve(){
    while(~scanf("%s%s",a,b)){
        memset(dp,0,sizeof(dp));
        printf("%d\n",lcs(strlen(a),strlen(b)));
    }
}




int main(){
#ifdef Yinku
    freopen("Yinku.in","r",stdin);
    //freopen("Yinku.out","w",stdout);
#endif // Yinku
    solve();
}
View Code

P3880 [JLOI2008]提示问题

注意fgets会连换行符一起保存在字符串中。

#include<bits/stdc++.h>
using namespace std;
#define ll long long

char s[105];
char ans1[105];
char ans2[105];
char ans3[105];

void solve(){
    fgets(s,100,stdin);
    int l=strlen(s);

    ans1[l]=ans2[l]=ans3[l]='\0';

    int cnt=0;
    for(int i=0;i<l;i++){
        ans1[i]=s[i];
        if(isalpha(s[i])){
            ans1[i]='.';
            cnt++;
        }
    }

    int show=round(1.0*cnt/3.0);
    for(int i=0;i<l;i++){
        ans2[i]=ans1[i];
        if(isalpha(s[i])&&show){
            ans2[i]=s[i];
            show--;
        }
    }

    int suc=0;
    for(int i=0;i<l;i++){
        ans3[i]=ans2[i];
        if(ans3[i]=='.'&&(s[i]=='A'||s[i]=='a'||s[i]=='E'||s[i]=='e'||s[i]=='I'||s[i]=='i'||s[i]=='O'||s[i]=='o'||s[i]=='U'||s[i]=='u')){
            ans3[i]=s[i];
            suc=1;
        }
    }

    if(suc==0){
        show=round(cnt*2.0/3.0);
        for(int i=0;i<l;i++){
            ans3[i]=ans1[i];
            if(isalpha(s[i])&&show){
                ans3[i]=s[i];
                show--;
            }
        }
    }

    printf("%s%s%s",ans1,ans2,ans3);
}


int main(){
#ifdef Yinku
    //freopen("Yinku.in","r",stdin);
    //freopen("Yinku.out","w",stdout);
#endif // Yinku
    solve();
}
View Code
扫描二维码关注公众号,回复: 5478171 查看本文章

猜你喜欢

转载自www.cnblogs.com/Yinku/p/10503016.html