【NOIP2016A组模拟7.13】亚瑟王之宫
题目
分析
我们定义\(dis_{x,y,x1,y2}\)表示\((x,y)\)到\((x1,y1)\)的距离。这个用spfa求。
接着,枚举两个集合点\((x,y)、(x1,y1)\), 得出这两个集合点到骑士的距离,放入\(dis1\)和\(dis2\)。
然后考虑贪心,
假设全选\(dis1\),和为\(sum\)。把\(dis2-dis1\)从小到大排个序,把前\(\dfrac{n}{2}\)的值加到\(sum\),答案就是\(\min(sum)\)
#include <cmath>
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <queue>
const int maxlongint=2147483647;
const int mo=1000000007;
const int N=205;
using namespace std;
int dis[21][21][21][21],a[N],n,m,r,c,ans=maxlongint,b[N][2],d[N*100][4],tot;
int z[8][2]=
{
{2,1},
{2,-1},
{-2,1},
{-2,-1},
{1,2},
{1,-2},
{-1,-2},
{-1,2}
};
bool bz[21][21];
int spfa(int x,int y)
{
int head=0,tail=1,xx,yy;
d[1][1]=x;
d[1][2]=y;
dis[x][y][x][y]=0;
while(head<tail)
{
xx=d[++head][1];
yy=d[head][2];
bz[xx][yy]=true;
for(int i=0;i<=7;i++)
{
if(dis[x][y][xx+z[i][0]][yy+z[i][1]]>dis[x][y][xx][yy]+1)
{
dis[x][y][xx+z[i][0]][yy+z[i][1]]=dis[x][y][xx][yy]+1;
if(bz[xx+z[i][0]][yy+z[i][1]])
{
bz[xx+z[i][0]][yy+z[i][1]]=false;
d[++tail][1]=xx+z[i][0];
d[tail][2]=yy+z[i][1];
}
}
}
}
}
int main()
{
scanf("%d%d%d",&n,&r,&c);
for(int i=1;i<=n;i++)
for(int j=0;j<=1;j++)
scanf("%d",&b[i][j]);
memset(dis,43,sizeof(dis));
for(int i=1;i<=r;i++)
for(int j=1;j<=c;j++)
{
memset(bz,true,sizeof(bz));
spfa(i,j);
}
for(int x=1;x<=r;x++)
for(int y=1;y<=c;y++)
{
int sum=0;
for(int i=1;i<=n;i++)
{
sum+=dis[x][y][b[i][0]][b[i][1]];
}
int o=sum;
for(int xx=1;xx<=r;xx++)
for(int yy=1;yy<=c;yy++)
if(x!=xx || y!=yy)
{
sum=o;
tot=0;
for(int i=1;i<=n;i++)
{
a[++tot]=dis[xx][yy][b[i][0]][b[i][1]]-dis[x][y][b[i][0]][b[i][1]];
}
sort(a+1,a+tot+1);
for(int i=1;i<=n/2;i++)
{
sum+=a[i];
}
if(sum<ans)
ans=sum;
}
}
printf("%d",ans);
}
【NOIP2016A组模拟7.13】亚瑟王之宫的更多相关文章
- NOIP2017提高组 模拟赛13(总结)
NOIP2017提高组 模拟赛13(总结) 第一题 函数 [题目描述] [输入格式] 三个整数. 1≤t<10^9+7,2≤l≤r≤5*10^6 [输出格式] 一个整数. [输出样例] 2 2 ...
- [JZOJ100043] 【NOIP2017提高A组模拟7.13】第K小数
Description 有两个正整数数列,元素个数分别为N和M.从两个数列中分别任取一个数相乘,这样一共可以得到N*M个数,询问这N*M个数中第K小数是多少. Input 输入文件包含三行. 第一行为 ...
- JZOJ100045 【NOIP2017提高A组模拟7.13】好数
题目 题目大意 首先有一个定义: 对于一个数,如果和它互质的数可以组成一个等差数列,那么这个数叫"好数". 现在给你一个数列,有三种操作: 1.询问一段区间内的好数的个数. 2.将 ...
- Bzoj4008 [HNOI2015]亚瑟王
Time Limit: 20 Sec Memory Limit: 512 MBSec Special Judge Submit: 1009 Solved: 605[Submit][Status] ...
- 【BZOJ4008】[HNOI2015]亚瑟王 期望
[BZOJ4008][HNOI2015]亚瑟王 Description 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑. 他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最 ...
- 【BZOJ-4008】亚瑟王 概率与期望 + DP
4008: [HNOI2015]亚瑟王 Time Limit: 20 Sec Memory Limit: 512 MBSec Special JudgeSubmit: 832 Solved: 5 ...
- BZOJ 4008: [HNOI2015]亚瑟王( dp )
dp(i, j)表示考虑了前i张牌, 然后还有j轮的概率. 考虑第i+1张牌: 发动的概率 : p = dp(i, j) * (1 - (1-p[i+1])^j) 没发动的概率 : dp(i, j) ...
- [HNOI 2015]亚瑟王
Description 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑. 他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂 亮.众所周知,亚瑟王是一 ...
- bzoj 4008 亚瑟王 - 动态规划 - 概率与期望
Description 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑. 他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂 亮.众所周知,亚瑟王是一 ...
随机推荐
- oracle存储过程和存储函数
存储过程 1.存储过程简介 下面先来简单介绍一下oracle的存储过程的语法,如下: create or replace procedure Tony_Process ( num in number, ...
- 阶段3 1.Mybatis_12.Mybatis注解开发_7 Mybatis注解开发一对多的查询配置
一对多的配置,一个用户对应多个账户 需要在Accout里面增加根据用户的uid查询的方法 在user里面指定子一对多的查询配置 换行显示 测试 把这里注销掉.测试延迟加载,代码注释掉后,延迟加载就没有 ...
- C#异常操作
C#异常处理子系统包括: Try:需要异常机制的函数在其中运行 Catch:捕获异常 Throw:抛出异常 Finally:在try结束实现 C#异常主要在Exception类中,而在CLR机制中的异 ...
- 【Linux开发】全面的framebuffer详解
全面的framebuffer详解 一.FrameBuffer的原理 FrameBuffer 是出现在 2.2.xx 内核当中的一种驱动程序接口. Linux是工作在保护模式下,所以用户态进程是无法象D ...
- diff patch比较文件打补丁
比较文件将结果保存到patch文件:diff -u test1.txt test2.txt > patchfile test1.txt应用patch文件,并备份(test1.txt.orig): ...
- DockerFile与镜像(Image)仓库
深入Docker 之 Image: 当我们使用docker pull mysql 这个命令获取镜像的时候,到底他是怎么做的?我们登录官方提供的仓库看一下 https://github.com/dock ...
- Linux yum 命令篇
yum( Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器. 基於RPM包管理,能够从指定的服务器自动下载RPM包 ...
- list 转 map java8
// Arrays.asList("a:1.0", "b:2.0", "c:3.0") --> Map {a=1.0, b=2.0, ...
- 记一次有趣的JsonFormat不生效问题
dto中使用了JsonFormat注解,如图 然后再序列化时 objectMapper.writeValueAsString(printReceBillVO) 始终值是一个Long,最后发现是包引用错 ...
- linux工具之screen
screen官方网址:http://www.gnu.org/software/screen/ 参考文章:http://man.linuxde.net/screen 简介 Screen是一款由GNU计划 ...