日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

SICNU 2018 Summer Training #10

發布時間:2023/12/13 综合教程 28 生活家
生活随笔 收集整理的這篇文章主要介紹了 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;
}

總結

以上是生活随笔為你收集整理的SICNU 2018 Summer Training #10的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。