【WZOI第二次NOIP模拟赛Day1T2】世界末日

Problem 2 世界末日 (doomsday.pas/c/cpp)

背景

话说CWQ大牛终于打开了那扇神秘大门,但迎接他的不是什么神秘的东西,而是一大群外星入侵者,WZland岌岌可危…..(这里说一下为什么外星人不自己打开那扇神秘大门呢?
因为在开辟通道的时候他们不小心将门装反了,这才会有CWQ破密码这一出。)

问题描述

WZland的国王向来喜爱和平,他不想与外星人正面冲突,于是他决定不和外星人战斗而采用躲避的方式来逃过这一劫难。
WZland的国王想找到一个地方(其实是新建一个避难所)来让WZland的所有人藏身。这一个伟大的任务就交给了WZOI应急小组的成员来完成。
话说WZland的版图是一个N×M的矩形,然后WZland被分成N×M块正方形的土地。在某些土地上是有WZland的居民居住的,但某些土地是荒地没有任何人居住(WZland的土地可
以用一个二元组(X,Y)来描述,表示这块土地处于第X行,第Y列)。
WZland的国王希望找到一个地方建立一个紧急避难所,他要求所有人走过的路程最短。
如果土地1的坐标为(X1,Y1),土地2的坐标为(X2,Y2),那么从土地1到土地2的路程为|X1-X2|+|Y1-Y2|。
时间十分紧迫,WZOI的成员只有1s的时间来解决这个问题。

输入格式

输入数据第一行包含3个整数N,M,T,分别表示WZland版图的大小和有人居住的土地的个数;
第2行到第T+1行,每行包含3个整数X,Y,P(1≤X≤N, 1≤Y≤M),分别表示土地的坐标和居住在这块土地的人数。输入数据保证同一块土地不会被多次描述。

输出格式

输出数据只包含一行,1个实数S,分别表示所有人到达紧急避难所所走的距离之和(结果保留两位小数)。

样例输入输出

Sample #1 
doomsday.in  doomsday.out 
1 1 1 
1 1 
0.00 
Sample #2 
doomsday.in  doomsday.out 
5 6 3 
1 2 1 
3 4 2 
1 3 4 
7.00

数据规模

对于30%的数据,N,M≤1000,T≤200;
对于50%的数据,N,M≤1000000,T≤5000;
对于100%的数据,N,M≤10000000,T≤200000;
对于100%的数据,P≤1000000。

时间限制

1s

【解题思路】

加权中位数;

我们可以知道x和y坐标可以是独立的,就是我们可以先求出x坐标再求出y坐标;

先求出总人数sum;

先把每一个点按照x坐标排序,然后从左往右扫,把每一个点上的人数加和,一直到和>=(sum+1)/2退出,当前点的x坐标就是“避难所”的x坐标;

然后把每一个点按照y坐标排序,然后从左往右扫,把每一个点上的人数加和,一直到和>=(sum+1)/2退出,当前点的y坐标就是“避难所”的y坐标;

那么我们现在确定了这个点的位置,只需要计算就可以了;

还可以这样来理解:我们先求一下所有人 走到一条横着的线上最小是哪里,再求一下所有人走到一条竖着的线上最小是哪里,这一横一竖就能确定一个点的位置;

【代码】

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
struct hp{
<span style="white-space:pre"> </span>int x,y,num;
}a[200005];
long long n,m,t,i,sum,mid,b,xx,yy;
double ans;int cmp1(hp a,hp b)
{
<span style="white-space:pre"> </span>return a.x<b.x;
}int cmp2(hp a,hp b)
{
<span style="white-space:pre"> </span>return a.y<b.y;
}int main()
{
<span style="white-space:pre"> </span>freopen("doomsday.in","r",stdin);
<span style="white-space:pre"> </span>freopen("doomsday.out","w",stdout);
<span style="white-space:pre"> </span>cin>>n>>m>>t;
<span style="white-space:pre"> </span>for (i=1;i<=t;++i)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>  cin>>a[i].x>>a[i].y>>a[i].num;
<span style="white-space:pre"> </span>  sum+=a[i].num;}mid=(sum+1)/2;
<span style="white-space:pre"> </span>sort(a+1,a+t+1,cmp1);
<span style="white-space:pre"> </span>b=0;
<span style="white-space:pre"> </span>i=0;
<span style="white-space:pre"> </span>while (b<mid)
<span style="white-space:pre"> </span>{
<span style="white-space:pre">     </span>i++;
<span style="white-space:pre">     </span>b+=a[i].num;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>xx=a[i].x;
<span style="white-space:pre"> </span>sort(a+1,a+t+1,cmp2);
<span style="white-space:pre"> </span>b=0;
<span style="white-space:pre"> </span>i=0;
<span style="white-space:pre"> </span>while (b<mid)
<span style="white-space:pre"> </span>{
<span style="white-space:pre">     </span>i++;
<span style="white-space:pre">     </span>b+=a[i].num;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>yy=a[i].y;
<span style="white-space:pre"> </span>ans=0;
<span style="white-space:pre"> </span>for (i=1;i<=t;++i)
<span style="white-space:pre"> </span>  ans+=a[i].num*(abs(a[i].x-xx)+abs(a[i].y-yy))+0.00;
<span style="white-space:pre"> </span>printf("%0.2lf",ans);
<span style="white-space:pre"> </span>return 0;
}

【犯的错误】

中间量会爆int,中间量必须开long long;窝开始就写了标算,结果就是因为开了int结果被卡成了30分;

woc被卡到30分的赶脚很不爽。。

【WZOI第二次NOIP模拟赛Day1T2】世界末日 解题报告相关推荐

  1. 【noip模拟赛4】Matrix67的派对 暴力dfs

    [noip模拟赛4]Matrix67的派对 描述 Matrix67发现身高接近的人似乎更合得来.Matrix67举办的派对共有N(1<=N<=10)个人参加,Matrix67需要把他们安排 ...

  2. 辣鸡(ljh) NOIP模拟赛 模拟 平面几何 数论 化学相关(雾)

    [题目描述] 辣鸡ljhNOI之后就退役了,然后就滚去学文化课了. 然而在上化学课的时候,数学和化学都不好的ljh却被一道简单题难住了,受到了大佬的嘲笑. 题目描述是这样的:在一个二维平面上有一层水分 ...

  3. NOI.AC NOIP模拟赛 第六场 游记

    NOI.AC NOIP模拟赛 第六场 游记 queen 题目大意: 在一个\(n\times n(n\le10^5)\)的棋盘上,放有\(m(m\le10^5)\)个皇后,其中每一个皇后都可以向上.下 ...

  4. 【HHHOJ】NOIP模拟赛 捌 解题报告

    点此进入比赛 得分: \(30+30+70=130\)(弱爆了) 排名: \(Rank\ 22\) \(Rating\):\(-31\) \(T1\):[HHHOJ260]「NOIP模拟赛 捌」Dig ...

  5. jyzy noip模拟赛5.22-2

    不知道哪来的题 jyzy noip模拟赛5.22-2 样例输入 1 2 3 4 样例输出 0.200000000000000 数据 |a|,|b|,|c|,|d|<=1e9 很多大佬迅速想到二分 ...

  6. NOIP模拟赛csy2021/10/30

    NOIP模拟赛csy2021/10/30 比赛时间规划 赛后反思与总结 这..总的来说感觉打的很不好,根本没有状态,有一部分原因是今天来晚了,太慌,更多的还是这次题感觉很难o(╥﹏╥)o 比赛时间规划 ...

  7. 2021年 第十二届蓝桥杯第二期校内模拟赛题解(Java版)

    时隔多日,终于会写一些简单DP了哈哈哈! 稍微改版,方便阅读,若有错,请指出 2019年 第十届蓝桥杯省赛题解(JavaB组版) 2020年 第十一届蓝桥杯第一场省赛题解(JavaB组版) 2020年 ...

  8. NOIP 模拟赛 长寿花 题解

    NOIP 模拟赛 长寿花 题解 要放 \(n\) 层物品,第 \(i\) 层有 \(a_i\) 个位置放物品,物品有 \(m\) 中颜色,有约束条件: 同一层两个相邻物品颜色不能相同. 相邻两层颜色集 ...

  9. NOIP模拟赛 17.10.10

    初次见面(firstmeet) [题目背景] 雾之湖边,静得可怕. 露米娅出神凝望.黑白连衣裙,像极了绽放的墨黑和洁白的莲.身边的雾之 湖,倒映着血色天空.酒红的双眸,映照一切.低声浅笑,双臂伸直,她 ...

最新文章

  1. d3.js 封装一个方法更新柱状图,运用数据模板
  2. BLE 数据包格式解析
  3. map的用法-HD 1029Ignatius and the Princess IV
  4. Android万年历课程设计,电子万年历的设计(课程设计)
  5. 机器学习 数据模型_使用PyCaret将机器学习模型运送到数据—第二部分
  6. 带有Spring Boot 2支持的Apache Camel 2.22发布
  7. ik分词器 mysql php_php环境下使用elasticSearch+ik分词器进行全文搜索
  8. java userdao,Java Web 开发基础------DAO
  9. oracle设置打印机,使用 Oracle Solaris 打印管理器设置网络连接的打印机
  10. 网管系统开发经验谈(二)
  11. 动软.Net代码自动生成器下载
  12. mysql 敏感词_过滤敏感词方式
  13. BestCoder #88(1001 1002)
  14. Scrapy实践:爬取斗鱼TV主播的头像(重写ImagesPipeline实现图片爬取)
  15. 玉品游戏java_整蛊游戏N合一(玉品)
  16. 中国推出人民币外汇货币掉期交易 规避汇率风险
  17. servlet+js实现首页、尾页、下一页、上一页(翻页功能)
  18. 显卡上DirectX 9.0 是什么意思
  19. 新手建站详细步骤(图文教程)
  20. java ssm羽毛球场地预约交流平台

热门文章

  1. 稀疏卷积 sparse conv
  2. window.location.href无法正常跳转
  3. VMware安装Ubuntu虚拟机详细教程
  4. python中utf-8是什么意思_python utf8什么意思
  5. (JS逆向2022.04.11) 某奇艺模拟登陆(不含滑块
  6. YUV420转YUV444
  7. HDU1686——Oulipo
  8. Nginx配置有条件的301跳转的方法
  9. 搜题计算机组装与维修教程,智慧职教云课堂APP计算机组装与维护(长沙环境保护职业技术学院)答案大全...
  10. 边缘检测--轮廓提取--透视变换实战