ACM-ICPC 2018 青岛赛区现场赛 K. Airdrop && ZOJ 4068 (暴力)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4068
题意:吃鸡游戏简化为二维平面上有 n 个人 (xi,yi),空投的位置在 (x0,y0),每一秒所有人向靠近空投的位置走一步,四个方向有优先级先后(优先纵坐标),若已经在空投的位置则不变。往空投位置移动过程中,若两个或者更多人在同一点相遇(在空投相遇不算),则他们都死亡。给出空投的纵坐标,询问空投在所有横坐标中最少和最多存活的人数是多少。
题解:在最优情况下,空投的横坐标必然是某一个人的横坐标,因为这样可以保证在该横坐标的人都不会死亡;而在最坏情况下,空投的横坐标则在两个不同横坐标的人之间,若所有人横坐标都相差1,则空投横坐标也是某一个人的横坐标,所以需要考虑的横坐标最多只有 2n 个。把横坐标排序后,分别从左往右扫一遍记录每个点左边存活的人数和从右往左扫一遍每个点右边存活的人数即可,具体看代码~
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define mst(a,b) memset((a),(b),sizeof(a))
#define mp(a,b) make_pair(a,b)
#define pi acos(-1)
#define pii pair<int,int>
#define pb push_back
const int INF = 0x3f3f3f3f;
const double eps = 1e-;
const int MAXN = 1e5 + ;
const int MAXM = 2e5 + ;
const ll mod = 1e9 + ; int x[MAXN],y[MAXN];
vector<int>p,vec[MAXN],ans;
int num[MAXM],sum[MAXM]; int main() {
#ifdef local
freopen("data.txt", "r", stdin);
// freopen("data.txt", "w", stdout);
#endif
int t;
scanf("%d",&t);
while(t--) {
int n,y0;
scanf("%d%d",&n,&y0);
p.clear();
p.push_back();
for(int i = ; i <= n; i++) {
scanf("%d%d",&x[i],&y[i]);
vec[x[i]].clear();
vec[x[i] + ].clear();
p.push_back(x[i]);
p.push_back(x[i] + );
}
sort(p.begin(),p.end());
p.erase(unique(p.begin(),p.end()),p.end());
for(int i = ; i <= n; i++) vec[x[i]].push_back(y[i]);
int cnt = , pre = ;
mst(sum, );
mst(num, );
for(int i = ; i < p.size(); i++) {
int nx = p[i];
sum[nx] = vec[nx].size();
vector<int>temp;
for(int j = ; j < vec[pre].size(); j++) {
int k = abs(1e5 + - pre) + abs(y0 - vec[pre][j]);
num[k]++;
if(num[k] == ) cnt++;
else temp.push_back(k);
}
for(int j = ; j < temp.size(); j++) {
if(num[temp[j]]) cnt--;
num[temp[j]] = ;
}
sum[nx] += cnt;
pre = p[i];
}
ans.clear();
mst(num, );
pre = cnt = ;
for(int i = p.size() - ; i >= ; i--) {
int nx = p[i];
vector<int>temp;
for(int j = ; j < vec[pre].size(); j++) {
int k = abs( - pre) + abs(y0 - vec[pre][j]);
num[k]++;
if(num[k] == ) cnt++;
else temp.push_back(k);
}
for(int j = ; j < temp.size(); j++) {
if(num[temp[j]]) cnt--;
num[temp[j]] = ;
}
sum[nx] += cnt;
ans.push_back(sum[nx]);
pre = p[i];
}
sort(ans.begin(),ans.end());
printf("%d %d\n",ans[],ans[ans.size() - ]);
}
return ;
}
ACM-ICPC 2018 青岛赛区现场赛 K. Airdrop && ZOJ 4068 (暴力)的更多相关文章
- 2016 ACM/ICPC亚洲区青岛站现场赛(部分题解)
摘要 本文主要列举并求解了2016 ACM/ICPC亚洲区青岛站现场赛的部分真题,着重介绍了各个题目的解题思路,结合详细的AC代码,意在熟悉青岛赛区的出题策略,以备战2018青岛站现场赛. HDU 5 ...
- ACM ICPC 2018 青岛赛区 部分金牌题题解(K,L,I,G)
目录: K Airdrop I Soldier Game L Sub-cycle Graph G Repair the Artwork ———————————————————— ps:楼主脑残有点严 ...
- ACM-ICPC 2018 青岛赛区现场赛 D. Magic Multiplication && ZOJ 4061 (思维+构造)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4061 题意:定义一个长度为 n 的序列 a1,a2,..,an ...
- ACM-ICPC 2018 沈阳赛区现场赛 K. Let the Flames Begin (约瑟夫环问题)
题目链接: 题意:有 n 个人围成一个圈,从 1 开始报到第 k 个人出环,问第 m 个出环的人是谁,n.m.k <= 1e18 且 min(m,k)<= 2e6. 题解:容易得出O(m) ...
- ACM-ICPC 2018 南京赛区现场赛 K. Kangaroo Puzzle (思维+构造)
题目链接:https://codeforc.es/gym/101981/attachments 题意:在 n * m 的平面上有若干个袋鼠和墙(1为袋鼠,0为墙),每次可以把所有袋鼠整体往一个方向移动 ...
- HDU 4046 Panda (ACM ICPC 2011北京赛区网络赛)
HDU 4046 Panda (ACM ICPC 2011北京赛区网络赛) Panda Time Limit: 10000/4000 MS (Java/Others) Memory Limit: ...
- ICPC 2018 徐州赛区网络赛
ACM-ICPC 2018 徐州赛区网络赛 去年博客记录过这场比赛经历:该死的水题 一年过去了,不被水题卡了,但难题也没多做几道.水平微微有点长进. D. Easy Math 题意: ...
- ACM总结——2017ACM-ICPC北京赛区现场赛总结
现在距离比赛结束已经过了一个多星期了,也是终于有时间写下心得了.回来就是被压着做项目,也是够够的. 这次比赛一样是我和两个学弟(虽然是学弟,但我的实力才是最弱的T_T)一起参加的,成绩的话打铁,算是情 ...
- ACM-ICPC 2017 西安赛区现场赛 K. LOVER II && LibreOJ#6062. 「2017 山东一轮集训 Day2」Pair(线段树)
题目链接:西安:https://nanti.jisuanke.com/t/20759 (计蒜客的数据应该有误,题目和 LOJ 的大同小异,题解以 LOJ 为准) LOJ:https://l ...
随机推荐
- airflow删除dag不在页面显示
当我们需要把dag删除的时候,遇到了删除了相应的dag文件,但页面还是显示 这个时候需要重启airflow 的webserver ps -ef|egrep rm -rf /home/airflow ...
- Visual studio 2010(VS2010) 安装MSDN方法
首先保证VS2010已经安装完毕 1.解压VS2010的安装文件(ISO),会看到ProductDocumentation文件夹,该文件夹下即为MSDN. 2.启动vs2010,点击"帮助& ...
- PHP生成有背景的二维码图片
Hart QR Code 快速生产带背景的二维码,他为你提供了以下功能 生产原始二维码,可配置url或则text,以及二维码大小 生产带背景带二维码,背景大小是你传入带背景大小,可配置原始二维码大小, ...
- 四、poll()、select()和epoll()
在用户程序中,poll()和select()系统调用用于对设备进行无阻塞访问.poll()和select()最终会调用设备驱动中的poll()函数,在我所使用的Linux内核中,还有扩展的poll() ...
- 串口(USART)通信-串口通讯协议简介
物理层:规定通讯系统中具有机械.电子功能部分的特性,确保原始数据在物理媒体的传输.其实就是硬件部分. 协议层:协议层主要规定通讯逻辑,统一收发双方的数据打包.解包标准.其实就是软件部分. 简单来说物理 ...
- Dubbo#编译动态扩展类
这篇排版有问题 后面修改....**** 以ExtensionLoader.getExtensionLoader(Protocol.class).getAdaptiveExtension();为例 - ...
- C# EntityCollection 和 List 互转
private EntityCollection<T> ToEntityCollection<T>(this List<T> list) where T : cla ...
- 日志(log4j2)
日志测试java代码如下: package com.learn.test; import org.apache.logging.log4j.LogManager; import org.apache. ...
- C#projectPropertyGrid 显示结构(展开逗号分隔)
[TypeConverter(typeof(ExpandableObjectConverter))] public A MyA { get{..} set{..} }
- java小工具:通过URL连接爬取资源(图片)
java语言编写一个简单爬取网站图片工具,实现简单: 通过 java.net.HttpURLConnection 获取一个URL连接 HttpURLConnection 连接成功返回一个java.io ...