zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    octotree神器 For Github and GitLab 火狐插件
    实用篇如何使用github(本地、远程)满足基本需求
    PPA(Personal Package Archives)简介、兴起、使用
    Sourse Insight使用过程中的常使用功能简介
    Sourse Insight使用教程及常见的问题解决办法
    github 遇到Permanently added the RSA host key for IP address '192.30.252.128' to the list of known hosts问题解决
    二叉查找树的C语言实现(一)
    初识内核链表
    container_of 和 offsetof 宏详解
    用双向链表实现一个栈
  • 原文地址:https://www.cnblogs.com/maybe96/p/9468863.html
Copyright © 2011-2022 走看看