【WZOI第二次NOIP模拟赛Day1T2】世界末日 解题报告
【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】世界末日 解题报告相关推荐
- 【noip模拟赛4】Matrix67的派对 暴力dfs
[noip模拟赛4]Matrix67的派对 描述 Matrix67发现身高接近的人似乎更合得来.Matrix67举办的派对共有N(1<=N<=10)个人参加,Matrix67需要把他们安排 ...
- 辣鸡(ljh) NOIP模拟赛 模拟 平面几何 数论 化学相关(雾)
[题目描述] 辣鸡ljhNOI之后就退役了,然后就滚去学文化课了. 然而在上化学课的时候,数学和化学都不好的ljh却被一道简单题难住了,受到了大佬的嘲笑. 题目描述是这样的:在一个二维平面上有一层水分 ...
- NOI.AC NOIP模拟赛 第六场 游记
NOI.AC NOIP模拟赛 第六场 游记 queen 题目大意: 在一个\(n\times n(n\le10^5)\)的棋盘上,放有\(m(m\le10^5)\)个皇后,其中每一个皇后都可以向上.下 ...
- 【HHHOJ】NOIP模拟赛 捌 解题报告
点此进入比赛 得分: \(30+30+70=130\)(弱爆了) 排名: \(Rank\ 22\) \(Rating\):\(-31\) \(T1\):[HHHOJ260]「NOIP模拟赛 捌」Dig ...
- jyzy noip模拟赛5.22-2
不知道哪来的题 jyzy noip模拟赛5.22-2 样例输入 1 2 3 4 样例输出 0.200000000000000 数据 |a|,|b|,|c|,|d|<=1e9 很多大佬迅速想到二分 ...
- NOIP模拟赛csy2021/10/30
NOIP模拟赛csy2021/10/30 比赛时间规划 赛后反思与总结 这..总的来说感觉打的很不好,根本没有状态,有一部分原因是今天来晚了,太慌,更多的还是这次题感觉很难o(╥﹏╥)o 比赛时间规划 ...
- 2021年 第十二届蓝桥杯第二期校内模拟赛题解(Java版)
时隔多日,终于会写一些简单DP了哈哈哈! 稍微改版,方便阅读,若有错,请指出 2019年 第十届蓝桥杯省赛题解(JavaB组版) 2020年 第十一届蓝桥杯第一场省赛题解(JavaB组版) 2020年 ...
- NOIP 模拟赛 长寿花 题解
NOIP 模拟赛 长寿花 题解 要放 \(n\) 层物品,第 \(i\) 层有 \(a_i\) 个位置放物品,物品有 \(m\) 中颜色,有约束条件: 同一层两个相邻物品颜色不能相同. 相邻两层颜色集 ...
- NOIP模拟赛 17.10.10
初次见面(firstmeet) [题目背景] 雾之湖边,静得可怕. 露米娅出神凝望.黑白连衣裙,像极了绽放的墨黑和洁白的莲.身边的雾之 湖,倒映着血色天空.酒红的双眸,映照一切.低声浅笑,双臂伸直,她 ...
最新文章
- d3.js 封装一个方法更新柱状图,运用数据模板
- BLE 数据包格式解析
- map的用法-HD 1029Ignatius and the Princess IV
- Android万年历课程设计,电子万年历的设计(课程设计)
- 机器学习 数据模型_使用PyCaret将机器学习模型运送到数据—第二部分
- 带有Spring Boot 2支持的Apache Camel 2.22发布
- ik分词器 mysql php_php环境下使用elasticSearch+ik分词器进行全文搜索
- java userdao,Java Web 开发基础------DAO
- oracle设置打印机,使用 Oracle Solaris 打印管理器设置网络连接的打印机
- 网管系统开发经验谈(二)
- 动软.Net代码自动生成器下载
- mysql 敏感词_过滤敏感词方式
- BestCoder #88(1001 1002)
- Scrapy实践:爬取斗鱼TV主播的头像(重写ImagesPipeline实现图片爬取)
- 玉品游戏java_整蛊游戏N合一(玉品)
- 中国推出人民币外汇货币掉期交易 规避汇率风险
- servlet+js实现首页、尾页、下一页、上一页(翻页功能)
- 显卡上DirectX 9.0 是什么意思
- 新手建站详细步骤(图文教程)
- java ssm羽毛球场地预约交流平台
热门文章
- 稀疏卷积 sparse conv
- window.location.href无法正常跳转
- VMware安装Ubuntu虚拟机详细教程
- python中utf-8是什么意思_python utf8什么意思
- (JS逆向2022.04.11) 某奇艺模拟登陆(不含滑块
- YUV420转YUV444
- HDU1686——Oulipo
- Nginx配置有条件的301跳转的方法
- 搜题计算机组装与维修教程,智慧职教云课堂APP计算机组装与维护(长沙环境保护职业技术学院)答案大全...
- 边缘检测--轮廓提取--透视变换实战