日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

usaco The Castle

發(fā)布時間:2023/11/27 生活经验 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 usaco The Castle 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
★The Castle 城堡
以一個幾乎超乎想像的運氣,農(nóng)民約翰在他的生日收到了一張愛爾蘭博彩的獎券.這一張獎券成為
了唯一中獎的獎券.農(nóng)民約翰嬴得愛爾蘭的鄉(xiāng)下地方的一個傳說中的城堡.
吹牛在他們威斯康辛州不算什么,農(nóng)民約翰想告訴他的牛所有有關(guān)城堡的事.他想知道城堡有多少
房間,而且最大的房間有多大.事實上,他想去掉一面墻來制造一個更大的房間.
你的任務(wù)是幫助農(nóng)民約翰去了解正確房間數(shù)目和大小.
城堡的平面圖被分為 M(wide)*N(1 <=M,N<=50)個小正方形.
每個這樣的小正方形有 0 到 4 面墻.
城堡在它的外部邊緣總是有墻壁的,好遮擋風(fēng)雨.
考慮這注解了一個城堡的平面圖:
1 2 3 4 5 6 7
#############################
1 # | # | # | | #
#####---#####---#---#####---#
2 # # | # # # # #
#---#####---#####---#####---#
3 # | | # # # # #
#---#########---#####---#---#
4 # -># | | | | # #
#############################
# =墻壁 -, | = 沒有墻壁
-> =移除這面墻能使得到的新房間最大
例子的城堡的大小是 7 x 4.
一個 "房間"是平面圖上有連接的"小正方形"的集合.
這個平面圖包含五個房間.(它們的大小是 9,7,3,1, 和 8 排列沒有特別的順序).
移除被箭作記號的墻壁來合并兩個房間來制造最大的可能房間(移除一面墻所能產(chǎn)生的).
城堡總是至少有二個房間并且總是有一面墻壁以可能被移除.
PROGRAM NAME: castle
INPUT FORMAT
地圖以一個表格來儲存,每個數(shù)字描述一個小正方形,N 行每行 M 個數(shù)來描述這個平面圖.
輸入順序符合那個在上面例子的編號方式.
每個描述小正方形的數(shù)字說明小正方形的四面的墻的分布情況,它是下面 4 個數(shù)的和:
1: 在西面有墻
2: 在北面有墻
22
4: 在東面有墻
8: 在南面有墻
內(nèi)部的墻壁是會被定義兩次;小正方形(1,1)南面的墻也被指出是小正方形(2,1)北面的墻.
第 1 行: 二個被空格分開的整數(shù): M 和 N
第 2 到: N+1 行: M x N 個整數(shù),每行 M 個.
SAMPLE INPUT (file castle.in)
7 4
11 6 11 6 3 10 6
7 9 6 13 5 15 5
1 10 12 7 13 7 5
13 11 10 8 10 12 13
OUTPUT FORMAT
輸出包含一些行:
第 1 行: 城堡的房間數(shù)目.
第 2 行: 最大的房間的大小
第 3 行: 移除一面墻能得到的最大的房間的大小
第 4 行: 移除哪面墻
選擇最佳的墻來移除,(選擇最靠西的,如果仍然不能確定,再選擇最靠南的.編者注:墻的位置應(yīng)該
由它的中點來定義)
(【原文】Choose the optimal wall to remove from the set of optimal walls by choosing the
wall farther to the west (and then, if still tied, farthest to the south).)

墻壁由它在相鄰的小正方形的西部或南方來命名

這題剛看到我就懵逼了,這什么鬼。然后就一直放在那,把2.1其他題目都做完了我又來搞他,看了題解(一定要耐心看代碼==)慢慢看發(fā)現(xiàn)思路不難(當(dāng)然自己寫出來還是很難),用wall[i][j][k]再用右移運算來判斷是否有墻。知道了思路后我就開寫了然后。。。。。。。。。媽的。。。。。。一開始n,m跟我們平時的順序不一樣,一個坑然后)(選擇最佳的墻來移除,(選擇最靠西的,如果仍然不能確定,再選擇最靠南的.編者注:墻的位置應(yīng)該
由它的中點來定義))被這句話搞成傻逼。

/*
ID:jinbo wu
LANG:C++
TASK: castle
*/
#include<bits/stdc++.h>
using namespace std;
int vis[55][55];
int room[55][55];
int wall[55][55][4];
int roomn;
int size[55*55];
void dfs(int x,int y)
{vis[x][y]=1;if(room[x][y]==roomn)return;room[x][y]=roomn;size[roomn]++;if(!wall[x][y][0]) dfs(x,y-1);if(!wall[x][y][1]) dfs(x-1,y);if(!wall[x][y][2]) dfs(x,y+1);if(!wall[x][y][3]) dfs(x+1,y);
}
int main()
{int n,m,ax,ay;int tmp;int rmax1=0;char c;freopen("castle.in","r",stdin);freopen("castle.out","w",stdout);scanf("%d %d",&m,&n);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){cin>>tmp;for(int k=0;k<4;k++)wall[i][j][k]=(tmp>>k)&1;}for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){if(!vis[i][j]){roomn++;dfs(i,j);rmax1=max(rmax1,size[roomn]);}}cout<<roomn<<endl;cout<<rmax1<<endl;rmax1=0;for(int j=1;j<=m;j++)for(int i=n;i>=1;i--){int room1=room[i][j];int room2=room[i][j+1];int room3=room[i-1][j];if(i>1&&wall[i][j][1]&&room1!=room3&&size[room1]+size[room3]>rmax1){ax=i,ay=j;c='N';rmax1=size[room1]+size[room3];}if(j<m&&wall[i][j][2]&&room1!=room2&&size[room1]+size[room2]>rmax1){ax=i,ay=j;c='E';rmax1=size[room1]+size[room2];}}cout<<rmax1<<endl;cout<<ax<<" "<<ay<<" "<<c<<endl;
}


總結(jié)

以上是生活随笔為你收集整理的usaco The Castle的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。