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(思维)的更多相关文章

  1. 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 ...

  2. The 2018 ACM-ICPC Asia Qingdao Regional Contest(部分题解)

    摘要: 本文是The 2018 ACM-ICPC Asia Qingdao Regional Contest(青岛现场赛)的部分解题报告,给出了出题率较高的几道题的题解,希望熟悉区域赛的题型,进而对其 ...

  3. The 2018 ACM-ICPC Asia Qingdao Regional Contest

    The 2018 ACM-ICPC Asia Qingdao Regional Contest 青岛总体来说只会3题 C #include<bits/stdc++.h> using nam ...

  4. 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 ...

  5. 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 ...

  6. 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 ...

  7. 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 ...

  8. 2018-2019, ICPC, Asia Yokohama Regional Contest 2018 K

    传送门:https://codeforces.com/gym/102082/attachments 题解: 代码: /** * ┏┓ ┏┓ * ┏┛┗━━━━━━━┛┗━━━┓ * ┃ ┃ * ┃ ━ ...

  9. ZOJ - 4048 Red Black Tree (LCA+贪心) The 2018 ACM-ICPC Asia Qingdao Regional Contest, Online

    题意:一棵树上有m个红色结点,树的边有权值.q次查询,每次给出k个点,每次查询有且只有一次机会将n个点中任意一个点染红,令k个点中距离红色祖先距离最大的那个点的距离最小化.q次查询相互独立. 分析:数 ...

随机推荐

  1. PM领导能力成熟度2级

    人生如戏,大幕拉开,他走上舞台,饰演PM一角. 从技术岗位迈向管理岗位的第一步,对大多数像他一样的新晋PM来说,并不轻松.技术知识与经验是他曾经的主要才能与成功基础,而从成熟度一级开始,身为管理者的他 ...

  2. ConchAPI | 更智能的API监控,提升团队效率

    “昨天调好的API,怎么又挂了,竟然没有人发现?” “喂喂喂,你的API挂了,无法调用成功?哪里出问题了?” “这段时间的API数量越来越多了,有谁能好好理清下?” 现在服务端技术越来越讲究微服务化, ...

  3. Delphi IfThen语句

    function IfThen(AValue: Boolean; const ATrue: string; AFalse: string = ''): string; overload; $[StrU ...

  4. JavaScript 节流函数 Throttle 详解

    在浏览器 DOM 事件里面,有一些事件会随着用户的操作不间断触发.比如:重新调整浏览器窗口大小(resize),浏览器页面滚动(scroll),鼠标移动(mousemove).也就是说用户在触发这些浏 ...

  5. java 向上向下取整

    Math.floor(1.4)=1.0 Math.round(1.4)=1 Math.ceil(1.4)=2.0 Math.floor(1.5)=1.0 Math.round(1.5)=2 Math. ...

  6. WIFI KILL神器

    https://anky.cc/esp8266-deauther-wifi-jammer/ https://github.com/spacehuhn http://tieba.baidu.com/p/ ...

  7. 免费高端出辕营,横空出世惊鬼神 Excel插件:ExcelPower_Helper 0.41初出茅庐

    免费高端出辕营,横空出世惊鬼神 Excel插件:ExcelPower_Helper 0.41初出茅庐        隐鹤 倾心开发 2019.4.1 1.   引言 经过前后大约零零散散的一年的开发, ...

  8. 02——Solr学习之Solr安装与配置(linux上的安装)

    借鉴博客:https://www.jianshu.com/p/1100f54fcbd8 https://www.cnblogs.com/jepson6669/p/9134652.html 1.准备一个 ...

  9. servlet(2)servlet过滤器

    1.servlet过滤器 用于动态的拦截servlet请求或响应,以变更或使用其中的信息. (1)过滤器和servlet是多对多的关系,即一个过滤器可以用于一个或多个servlet,多个过滤器也可以用 ...

  10. sqlserver登录名权限和用户名权限语句设置

    在sqlserver的安全体系中分为登录名和用户名,登录名是用于登录整个数据库系统用的,用户名是针对各个具体的数据来创建的用户,所以针对权限设置要有这个两个用户进行分别设置,下面写下用语句设置这两个用 ...