传送门:Problem J

https://www.cnblogs.com/violet-acmer/p/9664805.html

题目大意:

  BaoBao和DreamGrid玩游戏,轮流按灯的按钮,轮到BaoBao时按下b次,轮到DreamGrid时按下d次,初始时灯是灭的,每次按下按钮等都会持续亮v+0.5秒,如果按之前灯时灭的,则按下后灯会打开,如果灯是亮的,则按下后会从之灯的照明时间为v+0.5,且counter增加1,如果在v+0.5秒每没有再一次按下按钮,灯会熄灭。

  给出a,b,c,d,v,t五个数,t表示游戏时长[0,t],如果当前时刻是a的倍数,则BaoBao按按钮,如果当前时刻是c的倍数,则DreamGrid按按钮,如果是Lcm(a,c)的倍数,则两个人都会按按钮。

相关变量:

counter : 计数器

a,b,c,d,v,t : 题干所给变量

题解:

  我的想法是先遍历一边a的倍数,再遍历一边c的倍数,两个for( ),第一个for( )中i=a,i每次加a,第二个for( )中i=c,i每次加c。

  ①先除去特殊情况,当v > min(a,c)时,只需在0处将灯打开,之后在灯熄灭前肯定会按下依次min(a,c),在这种情况下灯全程都是亮的。

  ②如果不是特殊情况:通过两个for( )循环每次i += a 或 i += c来减少遍历次数

  第一个循环for(i=a;i <= t;i += a)不考虑在这之前是否有c的影响使当前时刻灯是亮的,所以此时counter += b-1;。

  第二个循环for(i=c;i <= t;i += c)需要考虑第一个循环未考虑的情况,①当前时刻可能受前一个a的影响使灯使亮的,②或受当前时刻的影响,使下一个a时刻灯是亮的。

  如果情况①和情况②同时出现,则在当前时刻不需消耗一次按动使灯打开,但受当前时刻影响,紧接着的a时刻是不需要消耗一次按动打开灯的,但是第一次循环没有考虑这个情况,故counter += d+1;。

  如果情况①和情况②只出现一种,则counter += d;。

  如果都不出现,则counter += d-1;。

AC代码:

 #include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;
#define esp 1.0e-8
#define INF 10e12+1
typedef long long ll; ll counter;
ll a,b,c,d;
ll v,t; void Initial()
{
scanf("%lld%lld%lld%lld",&a,&b,&c,&d);
scanf("%lld%lld",&v,&t);
counter=b+d-;//0时刻的情况
}
bool Special()
{
ll x=(a > c ? c:a);
if(v >= x)
{
counter += (t/a*b+t/c*d);
printf("%lld\n",counter);
return true;
}
return false;
}
bool is_exit(ll x,ll y,ll num)
{
return x%num == || y%num == || (y/num-x/num > );
}
void Process()
{
for(ll time=a;time <= t;time += a)
counter += b-; for(ll time=c;time <= t;time += c)
{
ll suf_time=(time+v <= t ? time+v:t);
bool flag1=is_exit(time-v,time,a);//判断[time-v,time]是否含有a的倍数
bool flag2=is_exit(time,suf_time,a);//判断[time,time+v]是否含有a的倍数
if(time%a == )//特判当前时刻是a,c倍数的情况
counter += d;
else if(flag1 && flag2)
counter += d+;
else if(flag1 || flag2)
counter += d;
else
counter += d-;
}
printf("%lld\n",counter);
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
Initial();
if(Special())
continue;
Process();
}
return ;
}

2018.9青岛网络预选赛(J)的更多相关文章

  1. 2018.9青岛网络预选赛(K)

    传送门:Problem K https://www.cnblogs.com/violet-acmer/p/9664805.html 题意: 给你n个数,找出满足条件的最多的数的个数. 题解: 满足条件 ...

  2. 2018.9青岛网络预选赛(B)

    传送门:Problem(B) https://www.cnblogs.com/violet-acmer/p/9664805.html 参考资料: https://blog.csdn.net/qq_40 ...

  3. 2018.9南京网络预选赛(J)

    传送门:Problem J https://www.cnblogs.com/violet-acmer/p/9720603.html 变量解释: need[ i ] : 第 i 个房间含有的旧灯泡个数. ...

  4. 2018.9青岛网络预选赛(H)

    传送门:Problem H https://www.cnblogs.com/violet-acmer/p/9664805.html 题意: BaoBao在一条有刻度的路上行走(哈哈,搞笑),范围为 [ ...

  5. 【2018沈阳赛区网络预选赛J题】Ka Chang【分块+DFS序+线段树】

    题意 给出一个有根树(根是1),有n个结点.初始的时候每个结点的值都是0.下面有q个操作,操作有两种,操作1.将深度为L的点的值全部增加X.操作2.查询以x为根的子树的结点值得和. 其中N,Q< ...

  6. 2018 icpc 青岛网络赛 J.Press the Button

    Press the Button Time Limit: 1 Second      Memory Limit: 131072 KB BaoBao and DreamGrid are playing ...

  7. 2018.9青岛网络预选赛(A)

    传送门:Problem A https://www.cnblogs.com/violet-acmer/p/9664805.html 题意: 求m个PERFECTs中最多有多少个连续的PERFECT和最 ...

  8. 2018.9青岛网络预选赛(C)

    传送门:Problem C https://www.cnblogs.com/violet-acmer/p/9664805.html 题意: 定义五个指令,判断能否从输入的n条指令中成功跳出循环,如果不 ...

  9. 【2018沈阳赛区网络预选赛J题】Fantastic Graph 【有上下界的网络流】

    要补的题太多了导致最近没写博客(好吧是我懒) 题目链接https://nanti.jisuanke.com/t/31447 题意 给出一个二分图,问能否挑选出一些边,使得每个点的度数都在[L,R]这个 ...

随机推荐

  1. 网页录像录音功能的实现之MediaRecorder的使用

    前面介绍了通过H5实现在网页内打开摄像头和麦克风,实现截图和图像预览的相关知识. getUserMedia API及HTML5 调用摄像头和麦克风 一个简单的demo  实现摄像头的调用及视频录制,截 ...

  2. Python-dict-12

    字典 Why:咱们目前已经学习到的容器型数据类型只有list,那么list够用?他有什么缺点呢? 1. 列表可以存储大量的数据类型,但是如果数据量大的话,他的查询速度比较慢. 2. 列表只能按照顺序存 ...

  3. Uniform Generator HDU1014

    题意 给你公式seed(x+1) = [seed(x) + STEP] % MOD ,输入step和mod, 问你是否可以从第一项0,算到mod,它们是否都不同 是 good choice 否则 ba ...

  4. 团队作业M1反思

    经过这两个多月以来的软件工程的学习,还有团队项目的经历,总结反思如下: 首先,一个月的软件工程团队项目的进行让我对软件开发有了比较实际的认识,以前我们的编程多是个人编程,两人编程,程序难度低,代码量少 ...

  5. 2-Twentieth Scrum Meeting-20151220

    任务安排 成员 今日完成 明日任务 闫昊 请假(数据库)   唐彬 请假(数据库)   史烨轩  尝试使用downloadmanager对notification进行更新  尝试使用downloadm ...

  6. Linux内核分析作业第五周

    系统调用的三个层次(下) 一.给MenuOS增加time和time-asm命令 1.克隆并自动编译 MenuOS rm menu -rf 强制删除原menu文件 git clone https://g ...

  7. 语音笔记:CTC

    CTC全称,Connectionist temporal classification,可以理解为基于神经网络的时序类分类.语音识别中声学模型的训练属于监督学习,需要知道每一帧对应的label才能进行 ...

  8. Python学习笔记——Python Number(数字)

    Python Number 类型转换 int(x, y) #将x转换为一个整数,y为进制数.如 int('11',2)将二进制数的11转成十进制数的整数,结果为3 long(x, y) #将x转换为一 ...

  9. mysql外键关联

    主键:是唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性 外键:是另一表的主键, 外键可以有重复的, 可以是空值,用来和其他表建立联系用的.所以说,如果谈到了外键,一定是至少涉及到两张表 ...

  10. jQuery(四)

    get():把jQuery转化成原生js <script> $(function(){ //alert($('#div1').get(0).innerHTML); //jQuery里面也有 ...