• hiho Mission Impossible 6(模拟 未提交验证。。)


    题意:模拟文本操作

    思路:模拟

    #include<iostream>
    #include<stdio.h>
    #include<string.h>
    using namespace std;
    
    #define MAXN 10005
    int M;
    char cmd[MAXN];
    char str1[MAXN],str2[MAXN];
    char copyStr[MAXN];
    
    void f(){
        int i,j,k,len,len1,len2,lencp;
        len=strlen(cmd);//命令长度
        len1=len2=0;//文本长度
        lencp=0;//剪贴板长度
        int pos=0;//光标位置
        int mode=0;//0 "insert mode",1 "overwrite mode"
        int copyState=0;//0 "NOTHING",1 "START"
        int copyPosition1,copyPosition2;
        for(i=0;i<len;++i){
            if(cmd[i]>='a'&&cmd[i]<='z'){
                if(copyState==1)copyState=0;
                if(len1<M){
                    if(pos==len1){
                        str1[len1++]=cmd[i];
                        str1[len1]='';
                        ++pos;
                    }
                    else{
                        if(mode==0){
                            for(j=k=0;j<pos;++j)str2[k++]=str1[j];
                            str2[k++]=cmd[i];
                            for(j=pos;j<len1;++j)str2[k++]=str1[j];
                            str2[k]='';
                            strcpy(str1,str2);
                            ++len1;
                            ++pos;
                            //cout<<len1<<endl;
                            //cout<<str1[0]<<endl;
                        }
                        else{
                            for(j=k=0;j<pos;++j)str2[k++]=str1[j];
                            str2[k++]=cmd[i];
                            for(j=pos+1;j<len1;++j)str2[k++]=str1[j];
                            str2[k]='';
                            strcpy(str1,str2);
                            ++pos;
                        }
                    }
                }
            }
            else if(cmd[i]=='L'){
                if(pos>0)--pos;
            }
            else if(cmd[i]=='R'){
                if(pos<len1)++pos;
            }
            else if(cmd[i]=='S'){
                if(copyState==1)copyState=0;
                if(mode==0)mode=1;//变为重写
                else mode=0;//变为插入
            }
            else if(cmd[i]=='D'){
                if(copyState==1){
                    copyState=0;
                    copyPosition2=pos;
                    if(copyPosition1<copyPosition2){
                        for(j=k=0;j<copyPosition1;++j)str2[k++]=str1[j];
                        for(j=copyPosition2;j<len1;++j)str2[k++]=str1[j];
                        str2[k++]='';
                        strcpy(str1,str2);
                        len1=len1-(copyPosition2-copyPosition1);
                    }
                    else{
                        for(j=k=0;j<copyPosition2;++j)str2[k++]=str1[j];
                        for(j=copyPosition1;j<len1;++j)str2[k++]=str1[j];
                        str2[k]='';
                        strcpy(str1,str2);
                        len1=len1-(copyPosition1-copyPosition2);
                    }
                }
                else{
                    if(pos<len1){
                        for(j=k=0;j<pos;++j)str2[k++]=str1[j];
                        for(j=pos+1;j<len1;++j)str2[k++]=str1[j];
                        str2[k]='';
                        strcpy(str1,str2);
                        --len1;
                    }
                }
            }
            else if(cmd[i]=='B'){
                if(copyState==1)copyState=0;
                if(pos>0){
                    for(j=k=0;j<pos-1;++j)str2[k++]=str1[j];
                    for(j=pos;j<len1;++j)str2[k++]=str1[j];
                    str2[k]='';
                    strcpy(str1,str2);
                    --len1;
                    --pos;
                }
            }
            else if(cmd[i]=='C'){
                if(copyState==0){
                    copyState=1;
                    copyPosition1=pos;
                }
                else{
                    copyState=0;
                    copyPosition2=pos;
                    if(copyPosition1!=copyPosition2){
                        if(copyPosition1<copyPosition2){
                            for(j=copyPosition1,k=0;j<copyPosition2;++j)
                                copyStr[k++]=str1[j];
                            copyStr[k]='';
                            lencp=copyPosition2-copyPosition1;
                        }
                        else{
                            for(j=copyPosition2,k=0;j<copyPosition1;++j)
                                copyStr[k++]=str1[j];
                            copyStr[k]='';
                            lencp=copyPosition1-copyPosition2;
                        }
                    }
                    else{
                        memset(copyStr,'',sizeof(copyStr));
                        lencp=0;
                    }
                }
            }
            else if(cmd[i]=='V'){
                if(lencp>0){
                    if(mode==0){
                        if(len1+lencp<=M){
                            for(j=k=0;j<pos;++j)str2[k++]=str1[j];
                            for(j=0;j<lencp;++j)str2[k++]=copyStr[j];
                            for(j=pos;j<len1;++j)str2[k++]=str1[j];
                            str2[k]='';
                            strcpy(str1,str2);
                            len1=len1+lencp;
                            pos=pos+lencp;
                        }
                    }
                    else{
                        if(pos+lencp<=M){
                            for(j=k=0;j<pos;++j)str2[k++]=str1[j];
                            for(j=0;j<lencp;++j)str2[k++]=copyStr[j];
                            for(j=pos+lencp;j<len1;++j)str2[k++]=str1[j];
                            str2[k]='';
                            strcpy(str1,str2);
                            if(pos+lencp>len1)len1=pos+lencp;
                            pos=pos+lencp;
                        }
                    }
                }
            }
        }
    }
    
    int main(){
        int T;
        scanf("%d",&T);
        while(T--){
            scanf("%d",&M);
            //M=100;
            scanf("%s",cmd);
            f();
            if(str1[0])printf("%s
    ",str1);
            else printf("NOTHING
    ");
        }
        return 0;
    }
    View Code
  • 相关阅读:
    CodeForces
    POJ
    POJ 2260 Error Correction 模拟 贪心 简单题
    POJ
    HDU
    UVA
    CodeForces
    CodeForces
    常见的医学图像成像(总)
    ADNI数据集相关概念整理
  • 原文地址:https://www.cnblogs.com/gongpixin/p/4824256.html
Copyright © 2020-2023  润新知