• Comet OJ


    A.壶中的大银河

    题意:输入长为n的字符串,B为男孩,G为女孩,求字符串中所含女孩子的个数

    思路:

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn = 1e5+5;
    char s[maxn];
    int main(){
        int n,num=0;
        scanf("%d",&n);
        scanf("%s",s);
        int len = strlen(s);
        for(int i=0;i<len;i++){
            if(s[i]=='G') num++;
        }
        printf("%d
    ",num); 
    }
    View Code

    B.「龙颈之玉 -五色的弹丸-」

    题意:给一张 n x m 的图(地图边界为墙),其中'o' 代表事物,'@'代表蛇头位置. 现在给出 长度小于 1e5 的操作,表示蛇要走的下一步,操作类型有 'W' 'A' 'S' 'D' 分别表示上下左右。注意:其中蛇头可以碰到蛇尾,如果重复,则输出蛇头符号'@'

    蛇尾符号用'X' 输出.

    思路:(1)模拟:开一个结构题存放蛇的所有部分,包括身体,头部.如果下一个位置有食物,则新增加头,之后的位置更新节点坐标。然后最后正着输出 (然后就TLE了)

    (2)上面那种方法实在太蠢,因为这里蛇头和蛇身可以重叠,所以不必要记录所有信息。首先是移动,在移动过程中每遇到一个'o'则蛇身的长度加一,最后走完能得到蛇的长度,在移动过程中判断蛇头是否超出边界,如果则GG。最后,按照蛇身的长度

    对操作取逆向移动,然后输出身体‘X’.

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn = 450;
    string mapp[maxn];
    int n,m;
    int headx,heady;
    int dis[4][2] = {-1,0,0,-1,1,0,0,1};
    int mov(char op){
        if(op=='W') return 0;
        if(op=='A') return 1;
        if(op=='S') return 2;
        if(op=='D') return 3;
    }
    int bac(char op){
        if(op=='W') return 2;
        if(op=='A') return 3;
        if(op=='S') return 0;
        if(op=='D') return 1;
    
    }
    int main(){
        cin>>n>>m;
        for(int i=0;i<n;i++){
            cin>>mapp[i];
        }
        int len = 0;//蛇身的长度
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                if(mapp[i][j]=='@') headx = i,heady = j,mapp[i][j]='.';
            }
        }
        string op;
        cin>>op;
        int flag = 0;
        for(int i=0;i<(int)op.size();i++){
            headx += dis[mov(op[i])][0];
            heady += dis[mov(op[i])][1];
            if(headx<0||headx>=n||heady<0||heady>=m) {flag = 1; break;}
            if(mapp[headx][heady]=='o') len++,mapp[headx][heady]= '.';
        }
        if(flag) puts("GG");
        else{
            int finx = headx,finy = heady;//用于最后有重复头尾部分的覆盖
            mapp[finx][finy] = '@';
            for(int i=(int)op.size()-1;i>=0;i--){
                headx += dis[bac(op[i])][0];
                heady += dis[bac(op[i])][1];
                if(len<=0) { continue; }
                if(mapp[headx][heady]!='@') mapp[headx][heady] = 'X';
                len--;
            }
            for(int i=0;i<n;i++){
                cout<<mapp[i]<<endl;
            }
        }
    }
    View Code
  • 相关阅读:
    13. Spring—AOP—JDK 的动态代理
    12. Spring — AOP 面向切面编程
    28-1 父组件传递数据给子组件 — props基本用法—驼峰命名说明
    【洛谷 1596】湖计数
    【洛谷 1280】尼克的任务
    【洛谷 3884】二叉树问题
    【洛谷 3384】模板树链剖分
    【洛谷 2089】烤鸡
    【洛谷 1706】全排列问题
    【洛谷 2692】覆盖
  • 原文地址:https://www.cnblogs.com/Tianwell/p/11845650.html
Copyright © 2020-2023  润新知