这次比赛题挺难的,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;
}