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 ...
随机推荐
- tabs 导航 及内容切换
<!-- 导航头 --> <div class="col-md-6" style="padding: 0px"> <ul id=& ...
- JS利用async、await处理少见的登录业务逻辑
在用uniapp开发一个项目时,有这样一个需求:用户首次登录后,uniapp自动保存用户名密码,之后不管是再次打开项目(打开项目时登录状态已失效)还是 请求接口(接口返回登录失效)时,都会先自动默认的 ...
- Git初始化配置以及配置github
1,配置用户名和邮箱(这里是我github中配置的用户名和邮箱),执行下面命令后,在C:\Users\yaosq盘下会出现一个全局文件.gitconfig. git config --global u ...
- (三)mybatis 的使用(入门)
目录 mybatis 的使用 -- 准备 mybatis 的使用 -- 搭建好工程结构 mybatis 的使用 -- 创建 sqlMapCnfig.xml 全局配置文件 mybatis 的使用 -- ...
- 用shell脚本安装MySQL-5.7.22-Percona版本
#!/bin/bash MySQL_Package=Percona-Server-5.7.22-22-Linux.x86_64.ssl101.tar.gz Package_Source=Percona ...
- gdb暂停或恢复程序的运行
ref : https://blog.csdn.net/seu_lyr/article/details/9050657 一 暂停程序的运行: (一)GDB的暂停方式:断点(BreakPoint). ...
- BurpSuite 爆破网页后台登陆
由于 Burp Suite是由Java语言编写而成,所以你需要首先安装JAVA的运行环境,而Java自身的跨平台性,使得软件几乎可以在任何平台上使用.Burp Suite不像其他的自动化测试工具,它需 ...
- 怎样发出一个HTTP请求
需要使用 xhr.send(); 参数为请求数据体, 如果没有就传入null, 一般来说, GET请求是不用传参的, POST就视情况而定, 理论上所有GET请求都可以改为POST, 反之则不行. v ...
- 11-MySQL DBA笔记-MySQL的监控
第11章 MySQL的监控 为什么我们需要监控呢?因为如果没有了监控,那么我们的服务可用性就无从度量,我们也无法及时地发现问题和处理问题.一个完善的监控体系,不仅需要进行实时的监控,也需要分析历史的监 ...
- 【QT学习笔记】二、信号槽和自定义信号槽
1. 信号槽 int main(int argc, char *argv[]) { QApplication app(argc, argv); QPushButton button("Qui ...