zoj 3981 Balloon Robot
https://vjudge.net/problem/ZOJ-3981
题意:
有m个座位,其中n个队伍坐在这些位置上,一个队伍一个座位。当一个队A了题之后,他们们会得到气球,假设他们在a时刻A题,但是在b时刻才得到气球,那么他们的不高兴值就会增加b - a。现在主办方安排了一个机器人发气球,机器人每时刻都会向右移动一个位置(当然是循环的),到了一个位置,如果这个位置上有队伍并且A了题没有得到气球,那么就会把气球发给这个队伍。现在给出每个队伍的位置和A题的情况,要求安排机器人的起始位置使得所有队伍的不开心值之和最小。
思路:
首先可以假设机器人在1位置,计算出每个题的气球需要等待的时间,然后接下来证明一个猜想,枚举的时间点必然是A题的时刻:
假设在当前枚举的时刻t没有A题,那么在枚举到t+1时刻,那么必然所有的A题的等待时间会减少1,直到有A题的时刻之后,时间才会增加。
首先把每个的等待时间排个序(求等待时间的时候,使用了二分法),之后顺序枚举
公式 ans = min(sum + i * m - d[i] * q),因为前面的A题时刻在起点后移之后必定会从m - 1开始递减的,所以有加上i * m,然后全部的等待时间都会减少d[i],所以每一个都减去。
总的时间复杂度为O(n)。
代码:
#include <stdio.h>
#include <string.h>
#include <vector>
#include <algorithm>
using namespace std; int d[];
int pos[]; bool meet(long long k,int tmp,int m,int b)
{
long long ans = k * m + tmp; if (ans >= b) return true;
else return false;
} int main()
{
int t; scanf("%d",&t); while (t--)
{
int n,m,p; scanf("%d%d%d",&n,&m,&p); long long sum = ; for (int i = ;i <= n;i++)
scanf("%d",&pos[i]); for (int i = ;i < p;i++)
{
int a,b; scanf("%d%d",&a,&b); a = pos[a]; long long l = ,r = ; int tmp = a - ; while (l < r - )
{
long long mid = (l + r) >> ; if (meet(mid,tmp,m,b)) r = mid;
else l = mid + ;
} while (meet(r - ,tmp,m,b)) r--; d[i] = r * m + tmp - b; sum += d[i]; //printf("%d 233\n",d[i]);
} sort(d,d+p); long long ans = ; for (int i = ;i < p;i++)
{
long long tmp = sum + (long long)i * m - (long long) p * d[i]; ans = min(tmp,ans);
} printf("%lld\n",ans);
} return ;
}
zoj 3981 Balloon Robot的更多相关文章
- ZOJ - 3981 - Balloon Robot (思维)
参考自:https://blog.csdn.net/qq_36553623/article/details/78445558 题意: 第一行三个数字n, m, q表示有m个座位围成一个环,n个队伍,q ...
- ZOJ 3981 && 2017CCPC秦皇岛 A:Balloon Robot(思维题)
A - Balloon Robot Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu Sub ...
- 2017 秦皇岛CCPC Balloon Robot (ZOJ 3981)
题意:给出n个队伍,m个座位,q次A题的队伍与时间,下一行是n个队伍的坐的位置,再下面q行就是第x个队再第y秒A出一道题,然后有一个机器人,开始位置由你选,他每走一步 他就会向右走一格,走到m的时候会 ...
- ZOJ 3981:Balloon Robot(思维+递推)
题目链接 题意 有n支队在m个位置上做题,有一个机器人位置1到位置m再到位置1循环走派发气球,当队伍a在时间b做完了一道题目的时候,假如机器人走到队伍a的位置的时间为c,那么这个队伍的不开心值就是c- ...
- Balloon Robot ZOJ - 3981
大意: n个参赛队, m个座位, 一共交了p次题, 一个机器人每秒钟会从位置$i$走到$i+1$, 若在$m$直接走到$1$, 当走到一个队伍就给该队应得的气球. 对于每道题, 假设交题时间$t_a$ ...
- zoj 3717 - Balloon(2-SAT)
裸的2-SAT,详见刘汝佳训练指南P-323 不过此题有个特别需要注意的地方:You should promise that there is still no overlap for any two ...
- 2017CCPC秦皇岛 A题Balloon Robot&&ZOJ3981【模拟】
题意: 一个机器人在长为M的圆形轨道上送气球,当机器人到达M号点的时候下一站会回到1号点,且全程不会停止运动.现在在长为M的轨道上有N个队伍,队伍会在某个时间做需要一个气球,机器人需要送过去.一共有P ...
- 【推导】zoj3981 Balloon Robot
题意:一个桌子有m个位置(首尾相接),有n支队伍坐在其中的n个位置上.有个机器人会从某个起始位置出发,每个时刻会依次发生以下三个事件: 机器人顺时针转一个单位: 某些队伍通过了题目(如果存在): 如果 ...
- ZOJ 3717 Balloon ( TLE )
正解2-SAT. 我用DLX想搜一搜的,结果TLE了…… 没什么遗憾,最起码我尝试过了. 扔个代码留作纪念. #include <cstdio> #include <cstring& ...
随机推荐
- Xss问题解决方案
xss跨站脚本攻击问题最主要是呈现在html页面的脚本被执行导致的结果,可分为两个方便作屏蔽 后台屏蔽 在前端上传的各个参数后,对其进行转义后再保存至数据库,属于暴力式转义,一般不建议.下面是写的例子 ...
- poj-1005-l tanink i need a houseboat
Description Fred Mapper is considering purchasing some land in Louisiana to build his house on. In t ...
- npm 和bower之间的区别
(一) npm是node js的包管理器,用来下载安装node js的第三方工具包,也可以用来发布你自己开发的工具包.通过npm可以安装bower,命令如下: npm install -g bower ...
- spring集成redis
redis是一种非关系型数据库,与mongoDB不同的是redis是内存数据库,所以访问速度很快.常用作缓存和发布-订阅式的消息队列.redis官方没有提供windows版本的软件.windows版本 ...
- React demo:express、react-redux、react-router、react-roter-redux、redux-thunk(一)
近期终于把之前留下的坑填上了(说了好久的要网站重写,总算是写完了),不过最后的在线添加文章,功能虽然做了,后台没把接口加上,实在是没精力去折腾了,公司又有事要忙,现在把从0开始到完成的一个思路来写一下 ...
- Java终结方法的使用(终结守卫者)
终结方法finalize()通常是不可预测的,也是很危险的,一般情况下是不必要的. Java语言规范并不保证finalize()会被及时执行,即不确定终结方法执行时间,只规定在对象被垃圾回收之前执行 ...
- C和C++运行库
一.Windows下动态库 1. 静态函数库 这类库的名字一般是libxxx.lib:利用静态函数库编译成的文件比较大,因为整个 函数库的所有数据都会被整合进目标代码中,他的优点就显而易见了,即编译后 ...
- swift textview禁止用户使用复制粘贴
//自定义一个TextView class Own_TextView: UITextView { override func caretRect(for position: UITextPositio ...
- swift 创建九宫格在后面加按钮
项目中的需求是前面图片,在图片最后面始终有按钮如图 图片 let space:CGFloat = 10 for i in 0..model.count{ let itemWidth:CGFloat = ...
- Beta敏捷冲刺每日报告——Day5
1.情况简述 Beta阶段Scrum Meeting 敏捷开发起止时间 2017.11.6 00:00 -- 2017.11.7 00:00 讨论时间地点 2017.11.6 早9:30,电话会议会议 ...