【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 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑. 他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂 亮.众所周知,亚瑟王是一 ...
随机推荐
- 阶段3 1.Mybatis_07.Mybatis的连接池及事务_5 mybatis中使用poolead配置连接的原理分析
idelConnection是空闲的链接 idelConnection就是ArrayList的数组 如果没有空闲的就new一个 新的connection 一个空闲池,一个活动的池,一个链接过来.空闲池 ...
- Spring 初识
一.Spring是什么? 首先可以进入Spring官网 https://spring.io/ 看一下相关介绍. Spring为开发者提供了一站式的轻量级应用开发平台.简单来说,Spring为开发者提供 ...
- Apache hadoop namenode ha和yarn ha ---HDFS高可用性
HDFS高可用性Hadoop HDFS 的两大问题:NameNode单点:虽然有StandbyNameNode,但是冷备方案,达不到高可用--阶段性的合并edits和fsimage,以缩短集群启动的时 ...
- oracle 日期格式操作
原文转自:http://hi.baidu.com/gzfvb/blog/item/5062b7f008eb70a8a50f5206.html Oracle日期格式: to_date(" ...
- 打印一个浮点数组,会输出字符串"Hello, world“ & 浮点数的二进制表示(IEEE 754标准)
#include <stdio.h> #include<stdlib.h> int main() { float a[3] = { 1143139122437582505939 ...
- fragment嵌套子fragment
场景: 需求是在expandablelistview的item长按会弹出一个对话框,对话框顶部一个选项卡,下面是fragment作相应的切换.对话框是用DialogFragment实现的. 问题: j ...
- Spark启动流程(Standalone)-分析
1.start-all.sh脚本,实际上执行java -cp Master 和 java -cp Worker 2.Master 启动时首先穿件一个RpcEnv对象,负责管理所有通信逻辑 3.Mast ...
- __init__ 和__new__的区别?
init 在对象创建后,对对象进行初始化. new 是在对象创建之前创建一个对象,并将该对象返回给 init.
- Spring如何读取xml配置文件的
我们通过一个小案例来看xml解析过程. 1. 导包 <dependencies> <!-- xml解析工具 --> <dependency> <groupId ...
- 剑指offer-二叉树的下一结点-树-python
题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 思路:中序遍历,pNode节点的下一个节点根据中序 ...