参考自:https://blog.csdn.net/qq_36553623/article/details/78445558

题意:

第一行三个数字n, m, q表示有m个座位围成一个环,n个队伍,q次A题

接下来n个数表示n个队伍所在位置(1<=ai<=m)

再接下来q行,每行a, b表示第a个队伍在第b秒A了一道题

有一个只会每一秒顺时针移动一个位置的发气球机器人

只要当前队伍有题目已经A了就会给他对应数量的气球(当然每道题最多1个气球)

如果a队伍在b时刻A了一道题,并在c时刻才拿到气球,那么这个队伍就会积累c-b点不开心值

求一个机器人起始位置(一开始是第0秒)使得所有队伍最终不开心值之和最小

思路:

对于一次ac,不开心值 = 当前位置 - 初始位置 - ac时间 也就是 不开心值 = a[i] - 1 - time

假设机器人现在是在1位置,计算出了所有交题的不开心值的和sum,现在改变初始位置1,变为x

现在的不开心值 = sum - 改变位置后减少的时间 + 改变位置后增加的时间

改变位置后减少的时间 = (p - x) * dis[x]

改变位置后增加的时间 = (m - dis[x]) * x

sum - (p - x) * dis[x] + x * (m - dis[x]) = sum + m * x - dis[x] * p

代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll;
const int maxn = 2e6+10;
ll dis[maxn], a[maxn];
int main() {
ll t, n, m, p;
scanf("%d", &t);
while(t--) {
ll x, time, sum = 0;
scanf("%lld %lld %lld", &n, &m, &p);
for(int i = 1; i <= n; i++) {
scanf("%lld", &a[i]);
}
for(int i = 0; i < p; i++) {
scanf("%lld %lld", &x, &time);
dis[i] = (a[x]-1-time+m) % m;
sum += dis[i];
}
ll ans = 0x3f3f3f3f3f3f3f3fLL;
sort(dis,dis+p);
for(int i = 0; i < p; i++) {
ans = min(ans, sum+m*i-dis[i]*p);
}
printf("%lld\n", ans);
}
return 0;
}

ZOJ - 3981 - Balloon Robot (思维)的更多相关文章

  1. zoj 3981 Balloon Robot

    https://vjudge.net/problem/ZOJ-3981 题意: 有m个座位,其中n个队伍坐在这些位置上,一个队伍一个座位.当一个队A了题之后,他们们会得到气球,假设他们在a时刻A题,但 ...

  2. ZOJ 3981 && 2017CCPC秦皇岛 A:Balloon Robot(思维题)

    A - Balloon Robot Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu Sub ...

  3. ZOJ 3981:Balloon Robot(思维+递推)

    题目链接 题意 有n支队在m个位置上做题,有一个机器人位置1到位置m再到位置1循环走派发气球,当队伍a在时间b做完了一道题目的时候,假如机器人走到队伍a的位置的时间为c,那么这个队伍的不开心值就是c- ...

  4. 2017 秦皇岛CCPC Balloon Robot (ZOJ 3981)

    题意:给出n个队伍,m个座位,q次A题的队伍与时间,下一行是n个队伍的坐的位置,再下面q行就是第x个队再第y秒A出一道题,然后有一个机器人,开始位置由你选,他每走一步 他就会向右走一格,走到m的时候会 ...

  5. Balloon Robot ZOJ - 3981

    大意: n个参赛队, m个座位, 一共交了p次题, 一个机器人每秒钟会从位置$i$走到$i+1$, 若在$m$直接走到$1$, 当走到一个队伍就给该队应得的气球. 对于每道题, 假设交题时间$t_a$ ...

  6. ZOJ 4124 拓扑排序+思维dfs

    ZOJ - 4124Median 题目大意:有n个元素,给出m对a>b的关系,问哪个元素可能是第(n+1)/2个元素,可能的元素位置相应输出1,反之输出0 省赛都过去两周了,现在才补这题,这题感 ...

  7. zoj 3778 Talented Chef(思维题)

    题目 题意:一个人可以在一分钟同时进行m道菜的一个步骤,共有n道菜,每道菜各有xi个步骤,求做完的最短时间. 思路:一道很水的思维题, 根本不需要去 考虑模拟过程 以及先做那道菜(比赛的时候就是这么考 ...

  8. Course Selection System ZOJ - 3956 01背包+思维

    Course Selection System ZOJ - 3956 这个题目居然是一个01背包,我觉得好难想啊,根本就没有想到. 这个题目把题目给的转化为  ans = a*a-a*b-b*b 这个 ...

  9. zoj 3717 - Balloon(2-SAT)

    裸的2-SAT,详见刘汝佳训练指南P-323 不过此题有个特别需要注意的地方:You should promise that there is still no overlap for any two ...

随机推荐

  1. python-----文件自动归类

    如何移动文件? →  使用内置模块来实现 归类的规则是什么? → 手动(预设文件夹)/ 自动(创建文件夹) import shutil import os path = './' #由于这里是相对路径 ...

  2. 杂项-Java:Struct

    ylbtech-杂项-Java:Struct Struts是Apache软件基金会(ASF)赞助的一个开源项目.它最初是Jakarta项目中的一个子项目,并在2004年3月成为ASF的顶级项目.它通过 ...

  3. sql的where条件中包含中文,查询不出来的处理方法

    SELECT  * FROM phonenumber_info where PROVANCE=N'广东' and  CITY=N'中山市'

  4. Commons-FileUpload 常用API

    ServerFileUpload类的常用方法 方法名称 方法描述 public void setSizeMax(long sizeMax) 设置请求信息实体内容的最大允许的字节数 public Lis ...

  5. Thinkphp模板标签if和eq的区别和比较

    在TP模板语言中.if和eq都可以用于变量的比较.总结以下几点: 1.两个变量的比较: <if condition=”$item.group_id eq $one.group_id”> & ...

  6. GG_Logs 日志类库封装使用说明

    3.6.GG_Logs 日志类库封装使用说明 GG_Logs类库项目,Nuget安装log4net 添加代码配置代码: [assembly: log4net.Config.XmlConfigurato ...

  7. java io 读取写文件

    java 读取txt文件,汉字乱码,原因是因为文件的编码格式和程序编码采用了不同的编码格式.通常,假如自己不修改的话,windows自身采用的编码格式是gbk(而gbk和gb2312基本上是一样的编码 ...

  8. C# 的占位符

    static void Main(string[] args) { Console.WriteLine("A:{0},a:{1}",65,97); Console.ReadLine ...

  9. 一个包含所有C++头文件的头函数

    #include<bits/stdc++.h> using namespace std; 使用方法和平常的头文件一样,#include<bits/stdc++.h>包含以下头文 ...

  10. N - Binomial Showdown (组合数学)

    Description In how many ways can you choose k elements out of n elements, not taking order into acco ...