D.Lakes in Berland(DFS)


Lakes in Berland


题意:三个参数:n,m,k,表示n * m 的矩形,‘*’表示的是土地,‘.’表示的是水,如果水四面都被土包围,那就是湖,否则就是海;求:将图中的湖变得剩下K个之后的图,输出,并求出将水变成图的最小的个数;

思路:先将海筛选掉,就是判断边界上有没有‘.’,然后dfs标记一下;之后再对图进行湖的记录,用一个结构体,记录湖的其中的一个点 和 湖中‘.’的个数;之后再进行排序,对point - k 个湖进行变换,输出;


#include<bits/stdc++.h>
using namespace std;
const int maxn = 50 + 5;
int n,m,k;

char s[maxn][maxn];
struct Node
{
    int x,y;
    int num;
}num[maxn * maxn];
bool vis[maxn][maxn];

int derict[][2] =
{
    1,0,
    -1,0,
    0,-1,
    0,1,
};
void flag_dfs(int x, int y)//把海筛掉
{
   vis[x][y] = true;
   for(int i = 0 ; i < 4 ; i ++)
   {
       int xx = x + derict[i][0];
       int yy = y + derict[i][1];
       if(xx >=1 && xx <= n && yy >= 1 && yy <= m && !vis[xx][yy] && s[xx][yy] == '.')
       {
           vis[xx][yy] = true;
           flag_dfs(xx,yy);
       }
   }
}
int temp;
void dfs(int x, int y)//对湖的信息进行记录
{
    vis[x][y] = true;
    for(int i = 0 ; i < 4 ; i ++)
    {
        int xx = x + derict[i][0];
        int yy = y + derict[i][1];
        if(xx >= 1 && xx <= n && yy >= 1 && yy <= m && !vis[xx][yy] && s[xx][yy] == '.')
        {
            temp ++;
            vis[xx][yy] = true;
            dfs(xx,yy);
        }
    }
}
bool cmp(struct Node a,struct Node b)
{
    return a.num < b.num;
}
void dfss(int x,int y)//改变湖的dfs
{
    vis[x][y] = true;
    s[x][y] = '*';
    for(int i = 0 ; i < 4 ; i ++)
    {
        int xx = x+ derict[i][0];
        int yy = y + derict[i][1];
        if(xx >= 1 && xx <= n && yy >= 1 && yy <= m && !vis[xx][yy] && s[xx][yy] == '.')
        {
            vis[xx][yy] = true;
            s[xx][yy] = '*';
            dfss(xx,yy);
        }
    }
}
int main()
{
   while( ~ scanf("%d%d%d",&n,&m,&k) )
   {
       memset(vis,false,sizeof(vis));

       for(int i = 1 ; i <= n ; i ++)
       {
           scanf("%s",s[i] + 1);
       }
       for(int i = 1; i <= n ; i ++)
       {
           if(s[i][1] == '.' && !vis[i][1])
            flag_dfs(i,1);
           if(s[i][m] == '.' && !vis[i][m])
            flag_dfs(i,m);
       }
       for(int i = 1; i <= m ;i ++)
       {
           if(s[1][i] == '.' && !vis[1][i])
            flag_dfs(1,i);
           if(s[n][i] == '.' && !vis[n][i])
            flag_dfs(n,i);
       }
//       for(int i = 1 ; i <= n ; i ++)
//       {
//           for(int j = 1 ;j <= m ; j ++)
//           {
//               cout << vis[i][j] << " ";
//
//           }
//           cout << endl;
//       }
       int point = 0;
       for(int i = 1; i <= n ;i ++)
       {
           for(int j = 1; j <= m ; j ++)
           {
               if(s[i][j] == '.' && ! vis[i][j])
               {
//                   cout << i << ' ' << j <<endl;
                   temp = 1;
                   dfs(i,j);
//                   cout << vis[2][3] <<endl;
                   num[point].x = i;
                   num[point].y = j;
                   num[point].num = temp;
                   point ++;
               }
           }
       }
//       cout << point <<endl;
       sort(num,num + point , cmp);
       memset(vis,false,sizeof(vis));
       int ans =0;
       for(int i = 0 ; i < point - k ; i ++)
       {
           ans += num[i].num;
           dfss(num[i].x,num[i].y);
       }
       cout << ans << endl;
       for(int i = 1; i <= n ; i ++)
       {
           cout << s[i] + 1 << endl;
       }
   }
   return 0;
}

下面附上同一个code forces写出来的两个水题:

A. The New Year: Meeting Friends


题意:相当于数轴上的三个点,求三点距离;


#include<bits/stdc++.h>
using namespace std;
const int maxn  = 100000 + 10;
typedef __int64 ll;
int main()
{
    int a[10];
    while(~ scanf("%d%d%d",&a[0],&a[1],&a[2]))
    {
        sort(a,a+3);
        int ans = 0;
        for(int i = 1; i < 3; i++)
        {
            ans += a[i] - a[i -1];
        }
        cout << ans <<endl;
    }
    return 0;
}

B. Text Document Analysis


题意:

求括号之外的单词的最长的长度   和   括号之内的单词的个数;


#include<bits/stdc++.h>
using namespace std;
const int maxn  = 100000 + 10;
typedef __int64 ll;
char s[maxn];
int main()
{
    int n;
    while(~ scanf("%d",&n) )
    {
        scanf("%s",s);
        int len = strlen(s);
        int ans1 = 0, ans2 =0;
        for(int i =0 ;i < len ;i ++)
        {
            if(s[i] == '(')
            {
                int j;
                for(j = i + 1; j < len && s[j] != ')';j ++)
                {
                    if(((s[j] >= 'a' && s[j] <= 'z')||(s[j] >= 'A' && s[j] <= 'Z')) && !((s[j +1] >= 'a' && s[j+1] <= 'z')||(s[j +1] >= 'A' && s[j + 1] <= 'Z')))
                    {
//                        cout << j <<endl;
                        ans2 ++;
                    }
                }
                i = j;
            }
            if((s[i] >= 'a' && s[i] <= 'z')|| (s[i] >= 'A' && s[i] <= 'Z') )
            {
                int j = i + 1;
                while(j < len && (((s[j] >= 'a' && s[j] <= 'z')||(s[j] >= 'A' && s[j] <= 'Z'))))
                {
                    j ++;
//                    cout << j <<endl;
                }
//                cout <<i <<" fghfgh " <<j <<endl;
                if( j - i > ans1 )
                    ans1 = j -i;
                i = j - 1;
            }
        }
        cout << ans1 <<" " << ans2 <<endl;
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Lakes Environmental Austal View 8.6是一款用于环境空气质量模拟和预测的软件工具。由Lakes Environmental开发,旨在支持环境管理和决策制定过程。 Austal View是一种流行的空气质量建模工具,可以模拟和预测大气传输和扩散。它可以模拟各种对环境有潜在影响的源(如工业和交通源)对空气质量的影响。通过使用Austal View 8.6,用户可以评估不同源的潜在影响,并制定相应的环境保护和改善策略。 ARTM 1.4.2是德国用于空气污染模拟的一种专门软件。它采用了德国技术辅助评估模型(TA Luft)的方法,并进行了改进。ARTM可以用于评估不同扰动源(如工厂和化学品储存)对周围环境的影响,以及在可接受的限制条件下进行污染物排放。 AERMOD 8.9是美国环境保护署(EPA)批准的一种大气扩散模型。它广泛用于评估工业和工厂源对环境的影响。AERMOD基于物理学和统计学原理,可以模拟和预测污染物在大气中的传输和扩散。该模型可用于评估大气污染对人体健康和生态系统的潜在影响,并帮助制定相关的空气质量管理政策。 综上所述,Lakes Environmental Austal View 8.6、ARTM 1.4.2和AERMOD 8.9是三种常用的环境空气质量模拟和评估工具,它们可以帮助评估和预测不同源的潜在环境影响,并支持决策制定过程。这些工具为环境管理提供了科学依据,有助于制定有效的环境保护措施和政策。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值