题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4056

题意:有一个按钮,时间倒计器和计数器,在时间[0,t]内,某个数如果是a的倍数则按c次按钮,如果是b的倍数则按d次按钮。按钮的规则为:每次按完之后时间倒计器设为v+0.5,如果当时 led 灯是灭的则变亮,否则计数器+1,时间倒计器到0时led 灯变灭。(时间倒计器无时无刻在减小,最小为0)问最后计数器的数值。

题解:如果在按按钮之前led灯为灭的话,则这次按钮对计数器没有贡献,考虑按按钮之前 led 灯灭的总数可得出答案。显示如果v>=a 或者v>=c,则 led 灯只有一开始是灭的;否则考虑a和c的lcm,因为循环节 lcm。lcm范围内a和b的倍数全部筛出来记录一下到这个数灯灭的次数,注意就是0时刻灯一定是灭的但lcm时刻灯有可能是暗的,需要判断下。

 #include <bits/stdc++.h>
#include <iomanip>
//#include <unordered_set>
//#include <unordered_map>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define lc (o<<1)
#define rc (o<<1)^1
#define mst(a, b) memset(a, b, sizeof(a))
#define pb push_back
#define mp make_pair
#define pii pair<int, int>
#define IOS ios::sync_with_stdio(0);cin.tie(0);
#define random(a, b) rand()*rand()%(b-a+1)+a
#define EARTH_RADIUS 6371004
#define lowerbit(a) (a&(-a))
#define rad(d) ((d)*PI/180.0)
#define sd(a) scanf("%d",&a)
const int maxn = 2e6 + , maxm = , inf = 0x3f3f3f3f;
const ll mod = 1e9 + ;
const double pi=acos(-1.0);
const double eps = 1e-; map<ll,bool>vis;
ll dp[maxn];
vector<ll>vec; int main() {
#ifdef local
freopen("in", "r", stdin);
// freopen("in", "w", stdout);
#endif
int T;
scanf("%d",&T);
while(T--) {
vis.clear();
vec.clear();
int a,b,c,d;
ll v,t;
scanf("%d%d%d%d%lld%lld",&a,&b,&c,&d,&v,&t);
ll lcm = 1ll * a * c / __gcd(a,c);
ll ans = (t / a + ) * b + (t / c + ) * d;
if(v >= a || v >= c) {
ans--;
printf("%lld\n",ans);
continue;
}
for(int i = ; ; i++) {
ll num = 1ll * i * a;
if(num > lcm) break;
vec.push_back(num);
vis[num] = true;
}
for(int i = ; ; i++) {
ll num = 1ll * i * c;
if(num > lcm) break;
if(!vis[num]) vis[num] = true, vec.push_back(num);
}
sort(vec.begin(), vec.end());
int sz = vec.size();
ll pre = ;
dp[] = ;
for(int i = ; i < sz; i++) {
dp[i] = dp[i - ];
ll now = vec[i];
if(now - pre > v) dp[i]++;
pre = now;
}
if(t <= lcm) {
int pos = lower_bound(vec.begin(), vec.end(), t) - vec.begin();
if(vec[pos] > t) pos--;
printf("%lld\n",ans - dp[pos]);
continue;
}
if(dp[sz - ] != dp[sz - ]) {
ans -= dp[sz - ] * (t / lcm);
t %= lcm;
int pos = lower_bound(vec.begin(), vec.end(), t) - vec.begin();
if(vec[pos] > t) pos--;
ans -= dp[pos];
} else {
ans -= dp[sz - ];
t -= lcm;
ans -= ((dp[sz - ] - ) * (t / lcm));
t %= lcm;
int pos = lower_bound(vec.begin(), vec.end(), t) - vec.begin();
if(vec[pos] > t) pos--;
ans -= (dp[pos] - );
}
printf("%lld\n",ans);
}
return ;
}

ACM-ICPC 2018 青岛赛区网络预赛 J. Press the Button(数学)的更多相关文章

  1. ACM-ICPC 2018 徐州赛区网络预赛 J. Maze Designer (最大生成树+LCA求节点距离)

    ACM-ICPC 2018 徐州赛区网络预赛 J. Maze Designer J. Maze Designer After the long vacation, the maze designer ...

  2. ACM-ICPC 2018 南京赛区网络预赛 J.sum

    A square-free integer is an integer which is indivisible by any square number except 11. For example ...

  3. 计蒜客 30999.Sum-筛无平方因数的数 (ACM-ICPC 2018 南京赛区网络预赛 J)

    J. Sum 26.87% 1000ms 512000K   A square-free integer is an integer which is indivisible by any squar ...

  4. ACM-ICPC 2018 沈阳赛区网络预赛 J树分块

    J. Ka Chang Given a rooted tree ( the root is node 11 ) of NN nodes. Initially, each node has zero p ...

  5. ACM-ICPC 2018 焦作赛区网络预赛J题 Participate in E-sports

    Jessie and Justin want to participate in e-sports. E-sports contain many games, but they don't know ...

  6. ACM ICPC 2018 青岛赛区 部分金牌题题解(K,L,I,G)

     目录: K Airdrop I Soldier Game L Sub-cycle Graph G Repair the Artwork ———————————————————— ps:楼主脑残有点严 ...

  7. ACM-ICPC 2018 南京赛区网络预赛 J题Sum(线性筛素数)

    题目链接:https://nanti.jisuanke.com/t/30999 参考自博客:https://kuangbin.github.io/2018/09/01/2018-ACM-ICPC-Na ...

  8. ACM-ICPC 2018 徐州赛区网络预赛 J Maze Designer(最大生成树+LCA)

    https://nanti.jisuanke.com/t/31462 题意 一个N*M的矩形,每个格点到其邻近点的边有其权值,需要构建出一个迷宫,使得构建迷宫的边权之和最小,之后Q次查询,每次给出两点 ...

  9. 大数开方 ACM-ICPC 2018 焦作赛区网络预赛 J. Participate in E-sports

    Jessie and Justin want to participate in e-sports. E-sports contain many games, but they don't know ...

随机推荐

  1. #【Python】【基础知识】【模块】【Python的常用模块】

    在IDE解释器中,执行help('modules')可查看当前环境可调用的Python模块: >>> help('modules') Please wait a moment whi ...

  2. java知识随笔整理-标量函数和表值函数

    以sql server为例: 1.表值函数 用户定义表值函数返回 table 数据类型,表是单个 SELECT 语句的结果集. 示例代码CREATE FUNCTION Test_GetEmployee ...

  3. oracle索引2

    问什么问题? 索引有什么代价?哪些场景下你需要建索引?或者有时候反过来问,哪些场景下不推荐建索引. 建好索引之后,怎么才能最高效地利用索引?或者反过来问,请说出一个无法有效利用已建索引的案例. 索引的 ...

  4. kettle下载地址

    kettle 4.4和4.2 版本是好的,版本6.6和8.2 版本有bug Kettle下载和安装: 1.官网各个版本下载地址:https://sourceforge.net/projects/pen ...

  5. Ajax方式上传文件报错"Uncaught TypeError: Illegal invocation"

    今天使用ajax上传文件时,出现了错误.数据传输的方式是通过定义formData完成的,提交的文件对象也设置为dom对象,但是还是不能发送请求.F12看到后台报了个错误:Uncaught TypeEr ...

  6. 连续取数字DP使值最大HDU2697

    题意: 有n个数,每个数都有价钱,连续的取可以获得len*len的利益,使利益最大. 思路: 三维DP,1.2.3维分别是第i个,剩余多少钱,从后往前连续的有几个. #define IOS ios_b ...

  7. mysql 组合两张表

    select P.FirstName,P.Lastname,A.City,A.State from Person P left join Address A on P.PersonId = A.Per ...

  8. Django-djangorestframework-请求模块-获取请求参数

    目录 请求模块 源码分析 正式使用 总结 请求模块 主要是分析 drf 二次封装后的 request 对象 以及怎么拿到请求传递过来的数据(url 拼接的数据,数据包传过来的数据) 源码分析 源码查看 ...

  9. 基于LINUX下的进程管理问题

    什么是进程? 程序(program)放置在存储媒体中(如硬盘,光盘,软盘,磁带等)为实体文件的形态存在 进程:程序被触发后,执行者的权限与属性,程序的程序码与所需数据等都会被载入内存中,操作系统并给予 ...

  10. varnish应用

    Nginx+Varnish+基本业务 ngnix nginx.conf配置文件 user root; worker_processes ; error_log logs/error.log crit; ...