城堡

城堡问题-----------------------------------Flood Fill算法

[亡魂溺海] 提交于 2020-02-08 20:36:27
1 2 3 4 5 6 7 ############################# 1 # | # | # | | # ##### -- - ##### -- - # -- - ##### -- - # 2 # # | # # # # # # -- - ##### -- - ##### -- - ##### -- - # 3 # | | # # # # # # -- - ######### -- - ##### -- - # -- - # 4 # # | | | | # # ############################# ( 图 1 ) # = Wall | = No wall - = No wall 方向:上北下南左西右东。 图1是一个城堡的地形图。 请你编写一个程序,计算城堡一共有多少房间,最大的房间有多大。 城堡被分割成 m∗n个方格区域,每个方格区域可以有0~4面墙。 输入格式 第一行包含两个整数 m 和 n,分别表示城堡南北方向的长度和东西方向的长度。 接下来 m 行,每行包含 n 个整数,每个整数都表示平面图对应位置的方块的墙的特征。 每个方块中墙的特征由数字 P 来描述,我们用1表示西墙,2表示北墙,4表示东墙,8表示南墙,P 为该方块包含墙的数字之和。 例如,如果一个方块的 P 为3,则 3 = 1 + 2,该方块包含西墙和北墙。

卢森堡一日

邮差的信 提交于 2020-02-05 12:05:11
一天时间游了卢森堡,不幸下了一天的雨…… 不过对于我们惯用休闲游策略的人来说,这也算不上什么大不幸了,只是导致照片比较差。 先去了卢森堡北部小城维安登,有个城堡,还是遇过曾被流放的地方,虽然我们没去雨果故居,但还是看到了一些以维克多·雨果命名的店。去了维安登的城堡,我们再次在无意中选了一条人迹罕至的小路上山,不过偶尔爬爬山还是一件挺开心的事情。我一向不是很喜欢这种石头质的城堡,看上去是个不错的要塞,但如果生活在其中,应该比较压抑吧,尤其是在古时候人工照明不好的时候,那么大的城堡只有那么些小小的窗口。厚厚的石头墙隔开了外面的世界,遇到阴雨天,一切都沉沉的。不过从外面看起来,如此厚实的建筑确实让人觉得可以依赖。 在城堡下的小教堂,看到了现代派的彩绘玻璃和建在二楼的管风琴: 告别了城堡,开车到达卢森堡市的时候已经过了下午饭的点,幸好这个季节欧洲天黑得晚,让我们可以在丢弃了原有计划的情况下还可以比较休闲得欣赏卢森堡首都的峡谷和市中心。能在距离市中心如此近的地方有这样的大峡谷,应该是卢森堡的特色吧?虽然在这里找厕所的经历让我们颇为不爽,但这个峡谷还是不错的 大专栏 卢森堡一日 _vtMmwgP2t9Jwj9dHNH6vqNAA6xlFES_bHGBOMEhI" target="_blank" rel="noopener noreferrer"> 来源: https://www.cnblogs

Flood Fill——城堡问题

旧巷老猫 提交于 2020-01-17 20:07:54
图1是一个城堡的地形图。 请你编写一个程序,计算城堡一共有多少房间,最大的房间有多大。 城堡被分割成 m∗n个方格区域,每个方格区域可以有0~4面墙。 输入格式 第一行包含两个整数 m 和 n,分别表示城堡南北方向的长度和东西方向的长度。 接下来 m 行,每行包含 n 个整数,每个整数都表示平面图对应位置的方块的墙的特征。 每个方块中墙的特征由数字 P 来描述,我们用1表示西墙,2表示北墙,4表示东墙,8表示南墙,P 为该方块包含墙的数字之和。 例如,如果一个方块的 P 为3,则 3 = 1 + 2,该方块包含西墙和北墙。 城堡的内墙被计算两次,方块(1,1)的南墙同时也是方块(2,1)的北墙。 输入的数据保证城堡至少有两个房间。 输出格式 共两行,第一行输出房间总数,第二行输出最大房间的面积(方块数)。 数据范围 1≤m,n≤50, 0≤P≤15 输入样例: 4 7 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 输出样例: 5 9 这个处理墙的方法很特别,用二进制处理墙,并且和方向对应起来就可以了。 # include <iostream> # include <cstdio> using namespace std ; const int N = 60 ; int n , m ,

设计模式——抽象工厂模式

爱⌒轻易说出口 提交于 2020-01-13 18:13:37
背景 有一个生产王国的工厂,可以生产城堡、国王、军队。 国王也有不同的分类 军队也有不同的种类 城堡也有不同的种类 实现方式一 KingdomFactory:国王加工的工厂接口 ElfKingdomFactory:具体加工国王王国的工厂类,可以生产出来一些列的王国信息 Castle:城堡的基类 ElfCastle:具体的城堡实现类,实现了Castle 其他的类实现细节与上述的功能一致 方式二 该类图在上述的基础上,增加了工厂制造的类FactoryMaker,可以屏蔽掉client端对具体国王王国加工厂的细节。遵循了开闭原则 来源: CSDN 作者: LuckyZhouStar 链接: https://blog.csdn.net/ZHOUCHAOQIANG/article/details/103959567

宫廷守卫

◇◆丶佛笑我妖孽 提交于 2019-12-31 20:45:28
题目描述 从前有一个王国,这个王国的城堡是一个矩形,被分为M×N个方格。一些方格是墙,而另一些是空地。这个王国的国王在城堡里设了一些陷阱,每个陷阱占据一块空地。 一天,国王决定在城堡里布置守卫,他希望安排尽量多的守卫。守卫们都是经过严格训练的,所以一旦他们发现同行或同列中有人的话,他们立即向那人射击。因此,国王希望能够合理地布置守卫,使他们互相之间不能看见,这样他们就不可能互相射击了。守卫们只能被布置在空地上,不能被布置在陷阱或墙上,且一块空地只能布置一个守卫。如果两个守卫在同一行或同一列,并且他们之间没有墙的话,他们就能互相看见。(守卫就像象棋里的车一样) 你的任务是写一个程序,根据给定的城堡,计算最多可布置多少个守卫,并设计出布置的方案。 输入格式 第一行两个整数M和N(1≤M,N≤200),表示城堡的规模。 接下来M行N列的整数,描述的是城堡的地形。第i行j列的数用ai,j表示。 ai,j=0,表示方格[i,j]是一块空地; ai,j=1,表示方格[i,j]是一个陷阱; ai,j=2,表示方格[i,j]是墙。 输出格式 第一行一个整数K,表示最多可布置K个守卫。 此后K行,每行两个整数xi和yi,描述一个守卫的位置。 输入输出样例 输入 #1复制 3 4 2 0 0 0 2 2 2 1 0 1 0 2 输出 #1复制 2 1 2 3 3 不能放棋的地方之间不放即可。如果没有墙

codeforces 608 div2 portals(带反悔的贪心)

落爺英雄遲暮 提交于 2019-12-19 09:27:19
题目大意:我们要攻略n个城堡,每个城堡有ai,bi,ci三个参数,我们到达城堡i时必须至少有ai个人才能攻略,不能攻略输出-1 到达一个城堡后能够加bi个人。同时我们允许放1个人在城堡i防守,这样我们能得到ci的分数。注意过了这个城堡就不能再选择之前的城堡进行防守。但是,这里有一些道路允许我们在城堡b到城堡a,其中b大于a。 解题思路: 很自然地,我们每次到达一个城堡都尽可能进行defend,每次到达一个城堡若人数不够,我们就反悔,把之前分数低的defend的城市取消。大概思路就是这样,我们只用维护一个优先队列就可以了。但是上面的思路有些问题,我们在人数不够的时候,优先pop出来的是分数低的,这样有个bug,比如可能到达某座城市i,它可能和一些城市连起来,这时候我们应该pop掉和i连接的城市。那怎么避免这种情况呢?这里有一个key hint。 一个城市若是后面可以defend,我们不要在前面就defend,这样总是最优的,比如i和j是连起来的,其中j>i,这时候我们假如不在i defend在jdefend的好处是:[i+1,j]区间人数多了一个,更有利于我们攻略城堡。而且这样可以避免我们之前所说的bug。 #include <bits/stdc++.h> using namespace std; typedef struct{ int a,b,c; }cas; vector

暗黑城堡---最小生成树?????

倖福魔咒の 提交于 2019-12-06 08:34:59
这题哪里和最小生成树有关系??? 不明白呀! 问有几条路径的题,一般都是乘法原理 #include<iostream> #include<cstring> #include<queue> #include<vector> #include<algorithm> #define maxn 1010 using namespace std; const long long INF = 2147483647; int dis[maxn]; int vis[maxn]; struct Node { int p; int len; Node(int a, int b) :p(a), len(b) {} }; int cnt[maxn]; vector<Node>G[maxn]; void insert(int be, int en, int len) { G[be].push_back(Node(en, len)); } int n, m; bool operator < (const Node a, const Node b) { return a.len > b.len; } int dijstra() { memset(dis, 0x3f3f3f3f,sizeof(dis)); priority_queue<Node>que; que.push(Node(1,0)); dis[1] =

ASDFZ 3633 -- 排兵布阵

寵の児 提交于 2019-11-29 05:10:30
Description 小 X 是生活在 9102 年的一位高二的 OIer,也是本套模拟题的主角。 这是一件往事了…… 小 X 正在玩一款排兵布阵的游戏,这时候小 R 突然来找小 X 出去陪她玩。 于是小 X 把这个游戏丢给了你,希望你能帮他找到最优的策略,防止自己的不知道多少连胜断掉。 在游戏中有 n 座城堡,每局对战由两名玩家来争夺这些城堡。每名玩家有 m 名士兵,可以向第 i 座城堡派遣 ai名士兵去争夺这个城堡,使得总士兵数不超过 m。 如果一名玩家向第 i 座城堡派遣的士兵数严格大于对手派遣士兵数的两倍,那么这名玩家就占领了这座城堡,获得 i 分。 现在你即将和其他 s 名玩家两两对战,这 s 场对决的派遣士兵方案必须相同。小 X 通过某些途径得知了其他 s 名玩家即将使用的策略并告诉了你,你应该使用某种策略来最大化自己的总分。 由于方案可能不唯一,你只需要输出你能获得的总分的最大值。 Input 从标准输入读入数据。 输入第一行包含三个正整数 s,n,m,分别表示除了小 X 以外的玩家人数、城堡数和每名玩家拥有的士兵数。 接下来 s 行,每行 n 个非负整数,表示一名玩家的策略,其中第 i 个数 ai表示这名玩家向第 i 座城堡派遣的士兵数。 Output 输出到标准输出。 输出一行一个非负整数,表示你能获得的最大得分。 Sample Input #1 1 3 10

BZOJ 1239: [SCOI2008]城堡castle Dp+SA(模拟退火大法好)

谁都会走 提交于 2019-11-26 17:40:26
title BZOJ 1239 LUOGU 2538 Description 在一个国家里,有n个城市(编号为0 到n-1)。这些城市之间有n条双向道 路相连(编号为0 到n-1),其中编号为i的道路连接了城市i和城市ri(一条道 路可以连接一个城市和它自身),长度为di。n 个城市中有m个拥有自己城堡, 可以抵御敌人侵略。如果没有城堡的城市遭受攻击,则离它最近的城堡将派兵前 往救援。 你的任务是在不超过k个没有城堡的城市中建立城堡,使得所有城市中“离 最近城堡的距离”的最大值尽量小。换句话说,若令dist(c)表示城市c的最近城 堡离它的距离,则你的任务是让max{dist(c)}尽量小。 输入数据保证存在方案使得对于每个城市,至少有一个城堡能够到达。 Input 输入第一行为三个正整数n, m, k。第二行包含n个整数r0,r1,…,rn-1。第三行 包含n 个整数d0,d1,…,dn-1。第四行包含m 个各不相同的0~n-1 之间的整数,分 别为m个城堡所在的城市编号。 Output 输出仅一行,包含一个整数,即max{dist(c)}的最小值。 Sample Input 5 0 1 1 2 3 4 0 1 1 1 1 1 Sample Output 2 HINT 100%的数据满足:2<=n<=50, 1<=di<=106, 0<=m<=n-k analysis