zoukankan      html  css  js  c++  java
  • Codeforces Round #375 (Div. 2)【A,B【模拟】,D【DFS】】

    PS_B:阿洗吧!B题卧槽数组开了250...

    PS_D:D题主要挂在了50*50口算得了250,数组开小,然后一开始还错了。= =哎,以后对于数据范围还是注意一点;

    卧槽,这场可真二百五了。。。

    A题:

    水~尴尬

    #include<cstdio>
    #include<iostream>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    const int N=1010;
    int sum;
    int ans=N;
    int a,b,c;
    int n,m;
    void solve()
    {
        for(int i=1;i<=100;i++)
            ans=min(ans,abs(i-a)+abs(i-b)+abs(i-c));
    }
    int main()
    {
        scanf("%d%d%d",&a,&b,&c);
        solve();
        printf("%d
    ",ans);
        return 0;
    }

    B题:

    就是外面的模拟一下,里面还是不排除重复,直接搞搞就好了;

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    const int N=300;
    
    struct asd{
        char s[N];
    };
    asd out[N];
    asd in[N];
    int num1,num2;
    
    char s[N];
    char tmp[N];
    
    bool Judge(char c)
    {
        if(c>='a'&&c<='z')
            return 1;
        if(c>='A'&&c<='Z')
            return 1;
        return 0;
    }
    int main()
    {
        int n;
        scanf("%d%s",&n,s);
        int flag=0;
        num1=num2=0;
        int num=0;
        for(int i=0;i<n;i++)
        {
            if(Judge(s[i]))
            {
                tmp[num++]=s[i];
            }
            else
            {
                if(num)
                {
                    tmp[num]='';
                    if(flag)
                        strcpy(in[num1++].s,tmp);
                    else
                        strcpy(out[num2++].s,tmp);
                    num=0;
                }
                if(s[i]=='(')
                    flag=1;
                if(s[i]==')')
                    flag=0;
            }
        }
        if(num)
        {
            tmp[num]='';
            if(flag)
                strcpy(in[num1++].s,tmp);
            else
                strcpy(out[num2++].s,tmp);
        }
        int temp=strlen(out[0].s);
        for(int i=1;i<num2;i++)
        {
            int x=strlen(out[i].s);
            temp=max(x,temp);
        }
        printf("%d %d",temp,num1);
        return 0;
    }




    D题:

    题意:
    给你一副图,“*”不能走,“.”称为水,水连通了被"*"围住就成了湖,水没有连通流向了边界就称为海,然后给你k,要求填满最少数量的水构造一个只有k个湖,
    思路;
    先四周搜一下,标记掉海;
    然后搜里面,用个num标记所有的湖的名称,然后搞出个数,排个序
    填了[num-k]个湖就好了;

    #include<cstdio>
    #include<iostream>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    const int N=55;
    int dx[4]={0,0,-1,1};
    int dy[4]={1,-1,0,0};
    char s[N][N];
    int ma[N][N];
    int n,m,k;
    
    void dfs_hu(int x,int y,int num)
    {
        ma[x][y]=num;
        for(int i=0;i<4;i++)
        {
            int xx=x+dx[i];
            int yy=y+dy[i];
            if(xx<0||yy<0||xx>=n||yy>=m)
                continue;
            if(s[xx][yy]=='.'&&ma[xx][yy]==0)
            {
                dfs_hu(xx,yy,num);
            }
        }
    }
    void dfs_hai(int x,int y)
    {
        ma[x][y]=-1;
        for(int i=0;i<4;i++)
        {
            int xx=x+dx[i];
            int yy=y+dy[i];
            if(xx<0||yy<0||xx>=n||yy>=m)
                continue;
            if(s[xx][yy]=='.'&&ma[xx][yy]==0)
            {
                dfs_hai(xx,yy);
            }
        }
    }
    
    void gaohai()
    {
        for(int i=0;i<n;i++)
        {
            if(s[i][0]=='.'&&ma[i][0]==0)
            {
                ma[i][0]==-1;
                dfs_hai(i,0);
            }
        }
        for(int i=0;i<n;i++)
        {
            if(s[i][m-1]=='.'&&ma[i][m-1]==0)
            {
                ma[i][m-1]==-1;
                dfs_hai(i,m-1);
            }
        }
        for(int i=0;i<m;i++)
        {
            if(s[0][i]=='.'&&ma[0][i]==0)
            {
                ma[0][i]=-1;
                dfs_hai(0,i);
            }
        }
        for(int i=0;i<m;i++)
        {
            if(s[n-1][i]=='.'&&ma[n-1][i]==0)
            {
                ma[n-1][i]=-1;
                dfs_hai(n-1,i);
            }
        }
    }
    struct asd{
        int id;
        int w;
    };
    asd q[3000];
    bool cmp(asd x,asd y)
    {
        return x.w<y.w;
    }
    
    void debug()
    {
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
                printf("%2d",ma[i][j]);
            puts("");
        }
    }
    
    int main()
    {
        scanf("%d%d%d",&n,&m,&k);
        for(int i=0;i<n;i++)
            scanf("%s",s[i]);
        memset(ma,0,sizeof(ma));
        gaohai();
    
        int num=0;
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                if(s[i][j]=='.'&&ma[i][j]==0)
                {
                    num++;
                    ma[i][j]=num;
                    dfs_hu(i,j,num);
                }
            }
        }
        int pp[3000];
        memset(pp,0,sizeof(pp));
        int vis[3000];
        memset(vis,0,sizeof(vis));
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                if(ma[i][j]==-1||!ma[i][j])
                    continue;
                pp[ma[i][j]]++;
            }
        }
        for(int i=1;i<=num;i++)
        {
            q[i].w=pp[i];
            q[i].id=i;
        }
        int ans=0;
        sort(q+1,q+num+1,cmp);
        for(int i=1;i<=num-k;i++)
        {
            ans+=q[i].w;
            vis[q[i].id]=1;
        }
        printf("%d
    ",ans);
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                if(vis[ma[i][j]])
                {
                    printf("*");
                }
                else
                    printf("%c",s[i][j]);
            }
            puts("");
        }
        return 0;
    }


  • 相关阅读:
    打开 ASP.NET 配置设置窗体
    WCF中Service Configuration Editor的使用方法
    使用Process类调用EXE程序出错的问题
    C#子窗口关闭父窗口
    WCF客户端代理文件创建和使用中的问题
    JS 中的文件操作
    WCF在 IIS上面 部署的步骤
    asp.net中怎么将json格局的数据添加下拉菜单
    计算两个日期相差的天数
    SQL语句解释大全
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/5934739.html
Copyright © 2011-2022 走看看