传送门: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. python-知识回顾-16

    知识回顾 小数据池:int -5~256str 特殊字符,*数字20 ascii : 8位 1字节 表示1个字符unicode 32位 4个字节 表示一个字符utf- 8 1个英文 8位,1个字节 欧 ...

  2. linux-安装-源码安装

    编译安装 tengine

  3. 【2016.3.18】作业 VS2015安装&单元测试(2)

  4. 【CV】ICCV2015_Describing Videos by Exploiting Temporal Structure

    Describing Videos by Exploiting Temporal Structure Note here: it's a learning note on the topic of v ...

  5. JQuery监听页面滚动总结

    1.当前滚动的地方的窗口顶端到整个页面顶端的距离: var winPos = $(window).scrollTop(); 2.获取指定元素的页面位置: $(val).offset().top; 3. ...

  6. mysql数据库忘记密码时如何修改

    工具/原料 mysql数据库 cmd命令行 打开mysql.exe和mysqld.exe所在的文件夹,复制路径地址 打开cmd命令提示符,进入上一步mysql.exe所在的文件夹

  7. MyBatis 集合操作语法范例:配合SQL的in关键字

    Java语法: private String[] tagIds; MyBatis语法 <delete id="deleteByIds" parameterType=" ...

  8. Java-System.getProperty()

    Java平台使用了一个Poperties对象来维护其自己的配置信息.System泪中包含有一个Properties对象用于描述当前工作环境的配置.系统properties包含了关于当前用户.当前Jav ...

  9. Jquery 组 表单select交互选项

    <!DOCTYPE html><html lang="zh-cn"><head> <meta charset="utf-8&qu ...

  10. webpack4.x相关笔记整理

    概念 Webpack是一个模块打包机,它可以将我们项目中的所有js.图片.css等资源,根据其入口文件的依赖关系,打包成一个能被浏览器识别的js文件.能够帮助前端开发将打包的过程更智能化和自动化. W ...