ACM-ICPC 2018 青岛赛区网络预赛 J. Press the Button(数学)
题目链接: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(数学)的更多相关文章
- ACM-ICPC 2018 徐州赛区网络预赛 J. Maze Designer (最大生成树+LCA求节点距离)
ACM-ICPC 2018 徐州赛区网络预赛 J. Maze Designer J. Maze Designer After the long vacation, the maze designer ...
- ACM-ICPC 2018 南京赛区网络预赛 J.sum
A square-free integer is an integer which is indivisible by any square number except 11. For example ...
- 计蒜客 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 ...
- 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 ...
- 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 ...
- ACM ICPC 2018 青岛赛区 部分金牌题题解(K,L,I,G)
目录: K Airdrop I Soldier Game L Sub-cycle Graph G Repair the Artwork ———————————————————— ps:楼主脑残有点严 ...
- ACM-ICPC 2018 南京赛区网络预赛 J题Sum(线性筛素数)
题目链接:https://nanti.jisuanke.com/t/30999 参考自博客:https://kuangbin.github.io/2018/09/01/2018-ACM-ICPC-Na ...
- ACM-ICPC 2018 徐州赛区网络预赛 J Maze Designer(最大生成树+LCA)
https://nanti.jisuanke.com/t/31462 题意 一个N*M的矩形,每个格点到其邻近点的边有其权值,需要构建出一个迷宫,使得构建迷宫的边权之和最小,之后Q次查询,每次给出两点 ...
- 大数开方 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 ...
随机推荐
- #【Python】【基础知识】【模块】【Python的常用模块】
在IDE解释器中,执行help('modules')可查看当前环境可调用的Python模块: >>> help('modules') Please wait a moment whi ...
- java知识随笔整理-标量函数和表值函数
以sql server为例: 1.表值函数 用户定义表值函数返回 table 数据类型,表是单个 SELECT 语句的结果集. 示例代码CREATE FUNCTION Test_GetEmployee ...
- oracle索引2
问什么问题? 索引有什么代价?哪些场景下你需要建索引?或者有时候反过来问,哪些场景下不推荐建索引. 建好索引之后,怎么才能最高效地利用索引?或者反过来问,请说出一个无法有效利用已建索引的案例. 索引的 ...
- kettle下载地址
kettle 4.4和4.2 版本是好的,版本6.6和8.2 版本有bug Kettle下载和安装: 1.官网各个版本下载地址:https://sourceforge.net/projects/pen ...
- Ajax方式上传文件报错"Uncaught TypeError: Illegal invocation"
今天使用ajax上传文件时,出现了错误.数据传输的方式是通过定义formData完成的,提交的文件对象也设置为dom对象,但是还是不能发送请求.F12看到后台报了个错误:Uncaught TypeEr ...
- 连续取数字DP使值最大HDU2697
题意: 有n个数,每个数都有价钱,连续的取可以获得len*len的利益,使利益最大. 思路: 三维DP,1.2.3维分别是第i个,剩余多少钱,从后往前连续的有几个. #define IOS ios_b ...
- mysql 组合两张表
select P.FirstName,P.Lastname,A.City,A.State from Person P left join Address A on P.PersonId = A.Per ...
- Django-djangorestframework-请求模块-获取请求参数
目录 请求模块 源码分析 正式使用 总结 请求模块 主要是分析 drf 二次封装后的 request 对象 以及怎么拿到请求传递过来的数据(url 拼接的数据,数据包传过来的数据) 源码分析 源码查看 ...
- 基于LINUX下的进程管理问题
什么是进程? 程序(program)放置在存储媒体中(如硬盘,光盘,软盘,磁带等)为实体文件的形态存在 进程:程序被触发后,执行者的权限与属性,程序的程序码与所需数据等都会被载入内存中,操作系统并给予 ...
- varnish应用
Nginx+Varnish+基本业务 ngnix nginx.conf配置文件 user root; worker_processes ; error_log logs/error.log crit; ...