打卡信奥刷题(572)用C++信奥P7645[普及组/提高] [COCI2012-2013#5] ARHIPELAG

[COCI2012-2013#5] ARHIPELAG

题目背景

一个受欢迎的旅游目的地国家坐落在一个惊人美丽的群岛上沐浴在阳光下。这个国家的居民以其众多的岛屿为傲。然而,全球气候变暖让他们非常担心:海平面上升导致干燥土地的流失迅速增加,这削弱了群岛的美丽。

题目描述

这个群岛的地图是一个 R R R C C C 列的方阵。X 表示陆地,. 表示海。据估计,在 50 50 50 年里,海水将淹没目前所有三面或四面环海的土地。

假设地图外全被海覆盖。你的任务是计算出 50 50 50 年后的群岛地图(在所描述的海平面上升之后)。

因为那时的土地可能会比今天更少,你不需要打印出整个地图,而只是包含所有的土地的最小的矩形部分。

输入格式

第一行包含两个整数 R R R C C C,表示地图有 R R R C C C 列;

2 2 2 R + 1 R+1 R+1 行,目前群岛的地图,X 表示陆地,. 表示海。

输出格式

一个矩阵,表示 50 50 50 年后群岛的地图。

样例 #1

样例输入 #1

5 3
...
.X.
.X.
.X.
...

样例输出 #1

X

样例 #2

样例输入 #2

3 10
..........
..XXX.XXX.
XXX.......

样例输出 #2

.XX...X
XX.....

提示

【数据范围】

对于 100 % 100\% 100% 的数据, 1 ≤ R , C ≤ 10 1\le R,C \le 10 1R,C10


【说明】

本题分值按 COCI 原题设置,满分 80 80 80

题目译自 COCI2012~2013 CONTEST #5 T2 ARHIPELAG

C++实现

#include<bits/stdc++.h>
using namespace std;
char ls;
int r,c,dmap[20][20],dmap1[20][20];
int fx[4][2]={-1,0,0,-1,1,0,0,1};
int main(){
cin>>r>>c;
for(int i=1;i<=r;i++){
for(int j=1;j<=c;j++){
cin>>ls;
if(ls==‘X’)dmap[i][j]=dmap1[i][j]=1;
}
}
for(int i=1;i<=r;i++){
for(int j=1;j<=c;j++){
if(dmap[i][j]){
int js=0;
for(int k=0;k<4;k++){
if(!dmap1[i+fx[k][0]][j+fx[k][1]]){
js++;
}
}
if(js>=3)dmap[i][j]=0;
}
}
}
int maxx=-0x7f,maxy=-0x7f,minx=0x7f,miny=0x7f;
for(int i=1;i<=r;i++){
for(int j=1;j<=c;j++){
if(dmap[i][j]){
maxx=max(maxx,i),minx=min(minx,i);
maxy=max(maxy,j),miny=min(miny,j);
}
}
}
for(int i=minx;i<=maxx;i++){
for(int j=miny;j<=maxy;j++){
if(dmap[i][j])cout<<‘X’;
else cout<<‘.’;
}
cout<<endl;
}
return 0;
}

在这里插入图片描述

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值