The 2018 ACM-ICPC Asia Qingdao Regional Contest, Online J - Press the Button(思维)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4056
题意
有一个按钮、一个灯、一个计时器和一个计数器,每按一次按钮,计时器被置为v+0.5,若当前灯是灭的,按一次后变亮,若当前灯是亮的,按一次后计数器+1,若当前时间nt%a=0,则按b次按钮,若nt%c=0,则按d次按钮,问最后时间为t时,计数器的值
分析
通过分析可以发现,每lcm(a,c)个时间构成一个循环,所以只需要求出每个lcm(a,c)的贡献,作为一段,再求出共有多少段即可,最后余下部分不足一段再单独处理,需要注意的是几个边界情况,t=0时灯是灭的,所以第一段一定是以灯熄灭状态为起始条件,但后面的段可能以灯亮着状态为起始条件,这样整体就会差1。
再分析会发现,对于每一段,我们根本不用求出具体贡献,只要先假设灯一直是亮的,求出全部贡献,再求出灯熄灭了多少次就行,每熄灭一次counter数就要-1
可以得到这样的公式:(t/a)*b+(t/c)*d+b+d-1 ,即表示从0~t时刻,假设灯一直是亮的,按钮被按下的次数,因为实际t=0时灯是灭的,就相当于少按了一次按钮
然后减去每一段灯熄灭的次数,再处理下结尾部分即可
#include <bits/stdc++.h>
using namespace std; typedef long long LL;
vector<long long>Q;
long long a,b,c,d,v,t;
long long pt,cntt;
LL gcd(LL a,LL b){ //最大公约数if(b==) return a;
else return gcd(b,a%b);
} LL lcm(LL a,LL b){ //最小公倍数return a/gcd(a,b)*b; //防止溢出
}
void getblock(){ //得到每一段的贡献,即一段中灯熄灭次数
pt=lcm(a,c);
cntt=;
Q.clear();
for(LL i=;i<=pt;i+=a) Q.push_back(i);
for(LL i=;i<=pt;i+=c) Q.push_back(i);
sort(Q.begin(),Q.end());
Q.erase(unique(Q.begin(),Q.end()),Q.end()); //去重 for(int i=;i<Q.size();i++){
if(Q[i]-Q[i-]>v) //前后差大于v,即表示灯熄灭
cntt++;
}
}
int main(){
std::ios::sync_with_stdio(false);
int cnt;
cin>>cnt;
while(cnt--){
cin>>a>>b>>c>>d>>v>>t;
getblock();
long long ans=(t/a)*b+(t/c)*d+b+d-; //从0~t按下的次数
long long blk=t/pt; //共有blk段
ans=ans- blk*cntt; //减去每段中灯熄灭的次数
long long last=t%pt; //最后不足一段时的边界
for(LL i=;Q[i]<=last;i++) //单独处理最后不足一段部分
if(Q[i]-Q[i-]>v) ans--;
cout<<ans<<endl;
}
return ;
}
The 2018 ACM-ICPC Asia Qingdao Regional Contest, Online J - Press the Button(思维)的更多相关文章
- The 2018 ACM-ICPC Asia Qingdao Regional Contest, Online J Press the Button
BaoBao and DreamGrid are playing a game using a strange button. This button is attached to an LED li ...
- The 2018 ACM-ICPC Asia Qingdao Regional Contest(部分题解)
摘要: 本文是The 2018 ACM-ICPC Asia Qingdao Regional Contest(青岛现场赛)的部分解题报告,给出了出题率较高的几道题的题解,希望熟悉区域赛的题型,进而对其 ...
- The 2018 ACM-ICPC Asia Qingdao Regional Contest
The 2018 ACM-ICPC Asia Qingdao Regional Contest 青岛总体来说只会3题 C #include<bits/stdc++.h> using nam ...
- ACM ICPC Central Europe Regional Contest 2013 Jagiellonian University Kraków
ACM ICPC Central Europe Regional Contest 2013 Jagiellonian University Kraków Problem A: Rubik’s Rect ...
- 2019-2020 ICPC, Asia Jakarta Regional Contest (Online Mirror, ICPC Rules, Teams Preferred)
2019-2020 ICPC, Asia Jakarta Regional Contest (Online Mirror, ICPC Rules, Teams Preferred) easy: ACE ...
- The 2018 ACM-ICPC Asia Qingdao Regional Contest, Online -C:Halting Problem(模拟)
C Halting Problem In computability theory, the halting problem is the problem of determining, from a ...
- The 2018 ACM-ICPC Asia Qingdao Regional Contest, Online Solution
A Live Love 水. #include<bits/stdc++.h> using namespace std; typedef long long ll; ; const i ...
- 2018-2019, ICPC, Asia Yokohama Regional Contest 2018 K
传送门:https://codeforces.com/gym/102082/attachments 题解: 代码: /** * ┏┓ ┏┓ * ┏┛┗━━━━━━━┛┗━━━┓ * ┃ ┃ * ┃ ━ ...
- ZOJ - 4048 Red Black Tree (LCA+贪心) The 2018 ACM-ICPC Asia Qingdao Regional Contest, Online
题意:一棵树上有m个红色结点,树的边有权值.q次查询,每次给出k个点,每次查询有且只有一次机会将n个点中任意一个点染红,令k个点中距离红色祖先距离最大的那个点的距离最小化.q次查询相互独立. 分析:数 ...
随机推荐
- TiDB 架构及设计实现
一. TiDB的核心特性 高度兼容 MySQL 大多数情况下,无需修改代码即可从 MySQL 轻松迁移至 TiDB,分库分表后的 MySQL 集群亦可通过 TiDB 工具进行实时迁移. 水平弹性扩展 ...
- Win7系统下,docker构建nginx+php7环境实践
前面两章介绍的是Windows系统下如何安装和配置docker,主要原因在于,公司大多人数用的是Windows环境,想通过在Windows环境上,通过docker,构建一个公用的配置. 首先要说明的是 ...
- SpringCloud微服务Zuul跨域问题
目前项目结构是VUE做前端,后端采用微服务架构,在开发时前端需要跨域请求数据,通过ZuulFilter配置解决了简单跨域请求需要.但当需要在请求的header中增加token信息时,出现了请求失败的情 ...
- cocos web 多端口运行
cocos2d-js 也是比较普遍的游戏开发工具之一吧,今天想同时启动多个js项目来看下效果,结果百度不到添加端口的方法,又得去翻源码.... cocos run -p web 只要运行在本地就可以启 ...
- 进行Spark,Kafka针对Kerberos相关配置
1. 提交任务的命令 spark-submit \--class <classname> \--master yarn \--deploy-mode client \--executor- ...
- redis编译 报告错误 jemalloc/jemalloc.h:没有那个文件或目录 解决.
问题原因:没找到jemalloc头文件. 百度谷歌半天没找到有效的下载地址. github中有 到github下载.jemalloc https://github.com/jemalloc/jemal ...
- day 24 面向对象之继承及属性查找顺序
组合 组合:自定义类的对象作为另外一个类的属性 class Teacher: def init(self, name, age): self.name = name self.age = age t1 ...
- Visual Studio 2019 使用 Live Share
一.前言 Visual Studio 2019 在今天发布(北京时间)了,这次带来了一个比较有趣的 Live Share 功能,使用它可以进行更好的协作开发.主要功能: 更多资料可看官方介绍: Vis ...
- 安装Cnario Player 3.8.1.156或其他版本时提示"Warning 4154. Adobe Flash Player 13 ...not correctly installed"
错误提示 安装Cnario Player 3.8.1.156或其他版本时, 有时会出现如下提示: Warning 4154. Adobe Flash Player 13 ...not correctl ...
- K3CLOUDJOBPROCESS每分钟重启
1.进入服务,找到k3cloudjobprocess 2.设置每分钟重启