【推导】zoj3981 Balloon Robot

题意:一个桌子有m个位置(首尾相接),有n支队伍坐在其中的n个位置上。有个机器人会从某个起始位置出发,每个时刻会依次发生以下三个事件:

机器人顺时针转一个单位;

某些队伍通过了题目(如果存在);

如果机器人的当前的位置的队伍需求气球,机器人就会把他需求的气球都给他。

让你对于所有可能的初始位置,最小化所有队伍的所有题目的气球等待时长之和。

设一个函数y轴是等待时间,x轴是机器人的初始位置,于是每道题恰好被分成了两个斜率为-1的一次函数。

假设某道题目是在ci时刻由bi位置的队伍通过的,y=(bi-(x+ci)%m+m)%m

最小化每个位置所有函数图像到x轴的距离之和。

只需要枚举每个一次函数与x轴的交点,尝试用当前位置的值更新答案。

单题的函数画出来是这样的。

#include<algorithm>
#include<cstdio>
using namespace std;
typedef long long ll;
ll ans,sum;
int n,m,K,T,s[100005],b[100005],c[100005],x[100005];
int main(){
    scanf("%d",&T);
    for(;T;--T){
        ans=sum=0;
        scanf("%d%d%d",&n,&m,&K);
        for(int i=1;i<=n;++i){
            scanf("%d",&s[i]); --s[i];
        }
        for(int i=1;i<=K;++i){
            scanf("%d%d",&b[i],&c[i]);
            b[i]=s[b[i]];
        }
        for(int i=1;i<=K;++i){
            x[i]=(b[i]-c[i]%m+m)%m;
            sum+=(ll)x[i];
        }
        sort(x+1,x+K+1);
        ans=sum;
        for(int i=1;i<=K;++i){
            sum-=(ll)(x[i]-x[i-1])*(ll)K;
            ans=min(ans,sum);
            sum+=(ll)m;
        }
        printf("%lld\n",ans);
    }
    return 0;
}
时间: 2024-11-06 11:35:19

【推导】zoj3981 Balloon Robot的相关文章

机器学习笔记_PRML_Adaboost 算法的原理与推导

转自:http://blog.csdn.net/v_july_v/article/details/40718799 Adaboost 算法的原理与推导 1 Adaboost的原理 1.1 Adaboost是什么 AdaBoost,是英文"Adaptive Boosting"(自适应增强)的缩写,由Yoav Freund和Robert Schapire在1995年提出.它的自适应在于:前一个基本分类器分错的样本会得到加强,加权后的全体样本再次被用来训练下一个基本分类器.同时,在每一轮中加

机器学习算法推导过程中的数据基础知识

1.向量.矩阵求导 当然了,这里补充一下求解过程中的关于向量.矩阵求导的几个公式: 这里其实只需要明白第一个,后边的三个都可以由第一个简单的推导而来. 注意这里对列向量AX的每一项的求导写为行,不然就会得到一个超越矩阵,我们不采用这种方式.

Atitit.变量的定义&#160;获取&#160;储存&#160;物理结构&#160;基本类型简化&#160;隐式转换&#160;类型推导&#160;与底层原理&#160;attilaxDSL

Atitit.变量的定义 获取 储存 物理结构 基本类型简化 隐式转换 类型推导 与底层原理 attilaxDSL 1.1. $ 美元字符, php 黑头1 1.2. 默认变量的范围和声明:1 1.3. 变量的存储,储存在变量池里Map(varName,varVal)1 1.3.1. 复合变量1 1.4. 变量类型简化: 字符串 数字,  bool1 1.5. 变量自动隐式转换2 1.6. 类型推导2 2. 参考 复合变量2 1.1. $ 美元字符, php 黑头 1.2. 默认变量的范围和声明

最小二乘法的推导证明

1.附加题:推导线性最小二乘法过程 上述式子求解b 时最后一步用到求和性质,事实上 同理可证分子部分,具体请参考<计量经济学导论(第四版)Introductory Econometrics A Modern Approach Fourth Edition · 杰弗里·M·伍德里奇(Jeffrey M. Wooldridge)著>中的附录A 基本数学工具 . 2.赛马问题 问:36匹马,6条跑道,无计时器,最少几次比赛可以选出前3名? 答案是8次,思路如下: (1)把36匹马分成6组,分别进行6

从指数分布族去推导出广义线性模型

指数分布族的定义: 若一类概率分布可以写成如下形式,那么它就属于指数分布族: η - 自然参数,通常是一个实数 T(y) – 充分统计量,通常,T(y)=y,实际上是一个概率分布的充分统计量(统计学知识) 对于给定的a,b,T三个函数,上式定义了一个以η为参数的概率分布集合,即改变η可以得到不同的概率分布.极限定理得) 记录一下几个指数分布族以及它们的特征: 正态分布(高斯分布)--总体噪音(由中心极限定理得) 伯努利分布--逻辑回归(对01问题建模) 多项式分布--K种结果的事情进行建模 泊松

CodeForces 321 A - Ciel and Robot

[题目链接]:click here~~ [题目大意]:一个robot 机器人 ,可以根据给定的指令行动,给你四种指令,robot初始位置是(0,0),指令一出,robot会重复行动,判断能否在无限行动的情况下经过点(n,m). [解题思路]其实仔细模拟一下,可以发现是有周期的,判断即可,见代码吧~~ 代码: #include <iostream> #include <algorithm> #include <bits/stdc++.h> using namespace

HDOJ-1004 Let the Balloon Rise

http://acm.hdu.edu.cn/showproblem.php?pid=1004 输入N个字符串  输出出现频率最高的字符串 # include <stdio.h> # include <string.h> # define MAX 1005 struct BALLOON { char Color[20]; int Times;//同颜色气球出现次数 }Balloon[MAX]; int n, Count; void Set_Balloon(char Color[])

Y combinator 的推导过程

最近在看<暗时间>,书中有Y组合子的推导过程,初看时很难理解,这里记录一下加深记忆,我们使用Scheme语言的语法. 我们知道Scheme中可以这样定义递归函数 (define (func n) (if (= n 0) 1 (* n (func (- n 1))))) 但是我们知道define这个函数只起到了一个语法糖的效果,再对应lambda表达式还未知的时候是不能使用这个函数. 接下来我们只通过使用lambda表达式来推导出递归函数. 我们先做一下尝试 (lambda (n) (if (=

Robot Framework自动化测试(五)--- 开发系统关键字

最近一直在用robot framework 做自动化测试项目,老实说对于习惯直接使用python的情况下,被框在这个工具里各种不爽,当然,使用工具的好处也很多,降低了使用成本与难度:当然,在享受工具带来便利的同时也会受制于工具.对于特定的需求,工具没提供相关的Library和关键字的时候,就只能放弃了. 还好robot framework提供了 Evaluate 关键字,对于Evaluate 关键字的使用等有时间再讲.当robot framework 不能解决需求,我是直接写个.py 程序,通过