• 哈理工多校算法赛四


    A 石油采集:https://www.nowcoder.com/acm/contest/76/A

    #include <bits/stdc++.h>
    using namespace std;
    char a[55][55];
    int ans1,ans2,ans,n;
    void DFS(int x,int y)
    {
        if( x>n || x<1 || y>n || y<1 || a[x][y]=='.' ) return;
        (x+y)%2 ? ans1++ : ans2++; 
        a[x][y]='.';
        DFS(x+1,y);
        DFS(x-1,y);
        DFS(x,y+1);
        DFS(x,y-1);
    }
    int main()
    {
        int t; scanf("%d",&t);
        for(int w=1;w<=t;w++)
        {
            scanf("%d",&n);
            for(int i=1;i<=n;i++)
            {
                getchar();
                for(int j=1;j<=n;j++)
                    scanf("%c",&a[i][j]);
            }
            ans=0;
            for(int i=1;i<=n;i++)
                for(int j=1;j<=n;j++)
                {
                    ans1=ans2=0;
                    if(a[i][j]=='#')
                        DFS(i,j);
                    ans+=min(ans1,ans2);
                }
            printf("Case %d: %d
    ",w,ans);
        }
        return 0;
    }
    View Code

    题解:https://www.cnblogs.com/xingkongyihao/p/8444064.html

    B 道路建设:https://www.nowcoder.com/acm/contest/76/B

    #include <bits/stdc++.h>
    #define INF 0x3f3f3f3f
    using namespace std;
    struct node{ int x,y; };
    int flag[105],a[105][105],dis[105],ans,n,m,c;
    int main()
    {
        while(~scanf("%d%d%d",&c,&n,&m))
        {
            for(int i=1;i<=m;i++)
                for(int j=1;j<=m;j++)
                    a[i][j]=INF;
     
            memset(flag,0,sizeof(flag));
            int x,y,w,cnt=1,sum=0;
            for(int i=1;i<=n;i++)
            {
                scanf("%d%d%d",&x,&y,&w);
                a[x][y]=min(a[x][y],w);
                a[y][x]=min(a[y][x],w);
            }
     
            memset(dis,INF,sizeof(dis));
            for(int i=1;i<=m;i++)
                dis[i]=a[1][i];
            flag[1]=1;
     
            while(cnt<m)
            {
                int mini=INF,u;
                for(int i=1;i<=m;i++)
                    if(dis[i]<mini&&!flag[i])
                    {
                        mini=dis[i];
                        u=i;
                    }
                if(mini==INF) break;
                flag[u]=1; cnt++; sum+=dis[u];
                for(int i=1;i<=m;i++)
                    if(!flag[i])
                        dis[i]=a[u][i];
            }
     
            if(cnt==m&&sum<=c) printf("Yes
    ");
            else printf("No
    ");
        }
    }
    View Code

    Prim模板

    C 求交集:https://www.nowcoder.com/acm/contest/76/C

    #include <bits/stdc++.h>
    using namespace std;
    int a[1000005],b[1000005],n,m;
    int ans[1000005],k;
    int main()
    {
        while(~scanf("%d %d",&n,&m))
        {
            for(int i=0;i<n;i++)
                scanf("%d",&a[i]);
            for(int i=0;i<m;i++)
                scanf("%d",&b[i]);
            int i=0,j=0,k=0;
            while(i<n&&j<m)
            {
                if(a[i]==b[j])
                    ans[k++]=a[i],i++,j++;
                else if(a[i]>b[j]) j++;
                else i++;
            }
            if(k==0) printf("empty");
            else
            {
                for(int i=0;i<k-1;i++)
                    printf("%d ",ans[i]);
                printf("%d",ans[k-1]);
            }
            printf("
    ");
        }
        return 0;
    }
    View Code

    D 小明的挖矿之旅:https://www.nowcoder.com/acm/contest/76/D

    待解

    E 通知小弟:https://www.nowcoder.com/acm/contest/76/E

    待解

    F call to your teacher:https://www.nowcoder.com/acm/contest/76/F

    #include <bits/stdc++.h>
    #define INF 0x3f3f3f3f
    using namespace std;
    struct node{ int x,y; };
    int flag[55],a[55][55],ans,n,m;
    int main()
    {
        while(~scanf("%d%d",&n,&m))
        {
            for(int i=1;i<=n;i++)
                for(int j=1;j<=n;j++)
                {
                    if(i==j) a[i][j]=0;
                    else a[i][j]=INF;
                }
            memset(flag,0,sizeof(flag));
            int x,y,sign=0;
            while(m--)
            {
                scanf("%d%d",&x,&y);
                a[x][y]=1;
            }
            queue <int> q;
            q.push(1);
            flag[1]=1;
            while(!q.empty())
            {
                int m=q.front(); q.pop();
                for(int i=1;i<=n;i++)
                {
                    if(a[m][i]==1&&!flag[i])
                    {
                        flag[i]=1;
                        q.push(i);
                        if(i==n)
                        {
                            sign=1;
                            break;
                        }
                    }
                }
                if(sign==1) break;
            }
            printf("%s
    ", sign ? "Yes":"No" );
        }
    }
    View Code

    BFS是否可达

    G 老子的意大利炮呢:https://www.nowcoder.com/acm/contest/76/G

    待解

    H 老子的全排列呢:https://www.nowcoder.com/acm/contest/76/H

    #include <bits/stdc++.h>
    using namespace std;
    int a[10];
    int main()
    {
        for(int i=0;i<8;i++)
            a[i]=i+1;
        do
        {
            for(int i=0;i<7;i++)
                printf("%d ",a[i]);
            printf("%d
    ",a[7]);
        }while(next_permutation(a,a+8));
    }
    View Code
  • 相关阅读:
    内存泄漏检测工具VLD在VS2010中的使用举例
    boost::threadpool 调用类成员变量并传入参数 的方法
    boost之ThreadPool
    DllMain 用法
    分布式锁的几种实现方式
    利用cbmakegen导出Code::blocks的Makefile
    搜集C++实现的线程池
    微软开源rDSN分布式系统开发框架
    腾讯互娱开源分布式开发框架Pebble
    SpringBoot指定额外需要扫描的包
  • 原文地址:https://www.cnblogs.com/zquzjx/p/8585443.html
Copyright © 2020-2023  润新知