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;
    }
  • 相关阅读:
    hihocoder 1049 后序遍历
    hihocoder 1310 岛屿
    Leetcode 63. Unique Paths II
    Leetcode 62. Unique Paths
    Leetcode 70. Climbing Stairs
    poj 3544 Journey with Pigs
    Leetcode 338. Counting Bits
    Leetcode 136. Single Number
    Leetcode 342. Power of Four
    Leetcode 299. Bulls and Cows
  • 原文地址:https://www.cnblogs.com/maybe96/p/9468863.html
Copyright © 2011-2022 走看看