• SICNU 2018 Summer Training #10


    这次比赛题挺难的,1个多小时把签到的几题做了之后就动不了手了,就很难受

    首先是C题字符串操作,比赛刚开始就很多人过,而且是一遍过,感觉应该挺简单的,但是读题读了好久,真的好久。。

    思路就是按照他给的操作模拟,只是这个题意太难懂了

    #include <cstdio>
    #include <iostream>
    #include <string>
    #include <algorithm>
    #include <cstring>
    #include <cmath>
    #include <map>
    using namespace std;
    int main()
    {
        int n=0,m=0;
        string a;
        int b[10005],c[10005];
        cin>>a;
        int num[15005];
        memset(num,0,sizeof(num));
        int t=a.length()/2;
        for(int i=0;i<t;i++){
            num[i]=a[i]-'A';
            num[i+t]=a[i+t]-'A';
            n+=num[i];
            m+=num[i+t];
        }
    
        for(int i=0;i<t;i++){
            b[i]=(num[i]+n)%26;
            c[i]=(num[i+t]+m)%26;
        }
        char s[10005];
        for(int i=0;i<t;i++) s[i]=((b[i]+c[i])%26)+'A';
        for(int i=0;i<t;i++) cout<<s[i];
        return 0;
    }

    H题,dfs暴搜,水题

    题意就是在图中找有多少闭环,直接dfs(因为边界wa了一次)

    #include <cstdio>
    #include <iostream>
    #include <string>
    #include <algorithm>
    #include <cstring>
    #include <cmath>
    #include <map>
    using namespace std;
        int n,m;
        char s[100][100];
        int vis[100][100];
        void dfs(int i,int j,int sum){
            vis[i][j]=1;
            for(int x=-1;x<=1;x++){
                for(int y=-1;y<=1;y++){
                    int nx=i+x;
                    int ny=j+y;
                    if(nx>=0&&nx<n&&ny>=0&&ny<m&&vis[nx][ny]==0&&s[nx][ny]=='#') dfs(nx,ny,sum);
                }
            }
        }
    int main()
    {
        cin>>n>>m;
        memset(vis,0,sizeof(vis));
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                cin>>s[i][j];
            }
        }
        int sum=0;
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                if(s[i][j]=='#'&&vis[i][j]==0){
                    dfs(i,j,sum++);
                }
            }
        }
        cout<<sum<<endl;
        return 0;
    }

    最后是D题,模拟。。wa了挺多次

    有n个同学传蛋,每次老师给出两个操作中的一种,一个操作是将蛋,按顺序传给别的同学,一种是撤销之前的m次操作(仅包含第一种操作(即不能撤销先前的撤销命令))

    模拟,一开始用栈,后面用的数组,就是将每次操作后蛋的位置都存起来,然后撤销就回退覆盖先前的操作就OK了

    #include <cstdio>
    #include <iostream>
    #include <string>
    #include <algorithm>
    #include <cstring>
    #include <cmath>
    #include <map>
    #include <stack>
    using namespace std;
    int main()
    {
        int n,m;
        int t=1;
        int num[1000];
        num[0]=0;
        string s;
        int a,b;
        int sw;
        cin>>n>>m;
        for(int i=1;i<=m;i++){
            cin>>s;
            if(s[0]=='u'){
                cin>>a;
                t-=a+1;
            }
            else{
                a=atoi(s.c_str());
                sw=num[t-1];
                sw+=a;
                sw%=n;
                if(sw<0) sw+=n;
                num[t]=sw;
            }
            t++;
        }
        cout<<num[t-1]<<endl;
        return 0;
    }
  • 相关阅读:
    ACM HDU 3910 Liang Guo Sha(数学题,读懂题目)
    防止 7Zip 生成的 ZIP 文件在 Mac OS X 下出现乱码
    NYOJ 506
    Scanner
    String 与StringBuilder
    基于JAVA的聊天室开发
    PS加粗字体
    MySQL相关命令
    Matlab中数据处理和多项式插值与曲线拟合
    dos下进入某一文件
  • 原文地址:https://www.cnblogs.com/maybe96/p/9468863.html
Copyright © 2020-2023  润新知