哈理工多校算法赛四

 

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\n",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\n");
        else printf("No\n");
    }
}
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("\n");
    }
    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\n", 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\n",a[7]);
    }while(next_permutation(a,a+8));
}
View Code

 

posted @ 2018-03-16 21:16  _Jessie  阅读(124)  评论(0编辑  收藏  举报