[CF1182F]Maximum Sine
题意:\(f(x) = \text{abs}(\text{sin}(\frac{p}{q} \pi x))\),给定\(a,b,p,q\),求\(x\in[a,b]\)最大的\(f(x)\)。
题解:div2都这么仙了吗。。。
根据高中数学知识可以推出要求的就是使得\(\frac{px \mod q}{q}\)最接近\(\frac12\)的\(x\),也就是\(px \mod q\)最接近\(\frac q2\)。
有一个结论:\([px \mod q \in [l,r]] = \lfloor\frac{px-l}{q}\rfloor - \lfloor\frac{px-r-1}{q}\rfloor\)。考虑二分\(px \mod q\)与\(\frac q2\)的距离,对于一个\(mid\),相当于要求是否存在\(x\)使得\(px \mod q \in [l=\frac q2-mid,r=\frac q2+mid]\)。根据上述结论,这等价于\(\sum_{x=a}^b\lfloor\frac{px-l}{q}\rfloor - \lfloor\frac{px-r-1}{q}\rfloor\)是否\(>0\)。这个式子是可以类欧求的。
求出最小距离以后,用\(\text{exgcd}\)还原\(x\)即可。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll Inf = 1e18;
int gi() {
int x = 0, o = 1;
char ch = getchar();
while((ch < '0' || ch > '9') && ch != '-') {
ch = getchar();
}
if(ch == '-') {
o = -1, ch = getchar();
}
while(ch >= '0' && ch <= '9') {
x = x * 10 + ch - '0', ch = getchar();
}
return x * o;
}
ll solve(ll n, ll a, ll b, ll c) {
if(n < 0) {
return 0;
}
if(!n) {
return b / c;
}
if(a >= c || b >= c) {
return solve(n, a % c, b % c, c) + n * (n + 1) / 2 * (a / c) + (n + 1) * (b / c);
}
ll m = (a * n + b) / c;
return m * n - solve(m - 1, c, c - b - 1, a);
}
ll solve(ll l, ll r, ll a, ll b, ll c) {
return solve(r, a, b, c) - solve(l - 1, a, b, c);
}
void exgcd(ll a, ll b, ll &x, ll &y) {
if(!b) {
x = 1, y = 0;
return;
}
exgcd(b, a % b, y, x), y -= a / b * x;
}
ll a, b, p, q;
ll solve(ll p, ll q, ll t) {
ll gg = __gcd(p, q);
if(t % gg != 0) {
return Inf;
}
p /= gg, q /= gg, t /= gg;
ll x, y;
exgcd(p, q, x, y);
x *= t, y *= t;
ll k = (a - x) / q;
x += k * q;
while(x >= a) {
x -= q;
}
while(x < a) {
x += q;
}
return x;
}
int main() {
#ifndef ONLINE_JUDGE
freopen("a.in", "r", stdin);
freopen("a.out", "w", stdout);
#endif
int T = gi();
while(T--) {
a = gi(), b = gi(), p = gi() << 1, q = gi() << 1;
ll l = 0, w = q / 2, r = w;
while(l < r) {
ll mid = (l + r) >> 1;
ll L = w - mid, R = w + mid;
if(solve(a, b, p, q - L, q) - solve(a, b, p, q - R - 1, q)) {
r = mid;
} else {
l = mid + 1;
}
}
cout << min(solve(p, q, w - l), solve(p, q, w + l)) << endl;
}
return 0;
}
[CF1182F]Maximum Sine的更多相关文章
- CF1182F Maximum Sine【类欧,扩欧】
题目链接:洛谷 题目描述:求整数$x\in [a,b]$使得$|2px \ mod \ 2q-q|$最小,如果有多个$x$输出最小的. 数据范围:$1\leq a,b,p,q\leq 10^9$ 第一 ...
- CF 1182F Maximum Sine——根号算法
题目:http://codeforces.com/contest/1182/problem/F 注意有绝对值. 那么就是 k*p 对 q 取模,找最接近 \(\frac{q}{2}\) 的结果. 也就 ...
- Codeforces Round #566 (Div. 2)
Codeforces Round #566 (Div. 2) A Filling Shapes 给定一个 \(3\times n\) 的网格,问使用 这样的占三个格子图形填充满整个网格的方案数 如果 ...
- Codeforces Round #566 (Div. 2)题解
时间\(9.05\)好评 A Filling Shapes 宽度为\(3\),不能横向填 考虑纵向填,长度为\(2\)为一块,填法有两种 如果长度为奇数则显然无解,否则\(2^{n/2}\) B Pl ...
- POJ3693 Maximum repetition substring [后缀数组 ST表]
Maximum repetition substring Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9458 Acc ...
- Uncaught RangeError: Maximum call stack size exceeded 调试日记
异常处理汇总-前端系列 http://www.cnblogs.com/dunitian/p/4523015.html 开发道路上不是解决问题最重要,而是解决问题的过程,这个过程我们称之为~~~调试 记 ...
- iOS---The maximum number of apps for free development profiles has been reached.
真机调试免费App ID出现的问题The maximum number of apps for free development profiles has been reached.免费应用程序调试最 ...
- MTU(Maximum transmission unit) 最大传输单元
最大传输单元(Maximum transmission unit),以太网MTU为1500. 不同网络MTU如下: 如果最大报文数据大小(MSS)超过MTU,则会引起分片操作. 路径MTU: 网路 ...
- uva 11059 maximum product(水题)——yhx
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAB1QAAAMcCAIAAABo0QCJAAAgAElEQVR4nOydW7msuhKF2wIasIAHJK
随机推荐
- 好的计数思想-LightOj 1213 - Fantasy of a Summation
https://www.cnblogs.com/zhengguiping--9876/p/6015019.html LightOj 1213 - Fantasy of a Summation(推公式 ...
- python+selenium下拉列表option对象操作方法一
参考官方文档:https://selenium.dev/selenium/docs/api/py/webdriver_support/selenium.webdriver.support.select ...
- 在无界面centos7上部署MYSQL5.7数据库
1. 利用xshell连接好服务后,输入 wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm 下载软件安装 ...
- C#MessageBox 自动关闭窗口
1:MessageBox弹出的模式窗口会先阻塞掉它的父级线程.所以我们可以考虑在MessageBox前先增加一个用于"杀"掉MessageBox窗口的线程.因为需要在规定时间内&q ...
- HDFS中NameNode发生故障没有备份从SecondNameNode恢复
1.Secondary NameNode目录结构 Secondary NameNode用来监控HDFS状态的辅助后台程序,每隔一段时间获取HDFS元数据的快照. 在/opt/module/hadoop ...
- java_第一年_JavaWeb(14)
EL :EL表达式主要用于获取数据.执行运算.获取对象.调用java方法: 获取数据 语法:"${标识符}" 会调用pageContext.findAttribute方法,从pag ...
- HDU-2189来生一起走
题目: 今天,又来了n位志愿者,指挥部需要将他们分为若干个小组,小组的数量不限,但是要求每个小组的人数必须为素数,请问我们有几种分组的方法呢? 特别说明: 1.可以只有一个组: 2.分组的方法只和人数 ...
- appscan 历史版本下载
https://www.cnblogs.com/hua198/p/11120916.html
- 游戏服务端pomelo完整安装配置过程
版权声明:本文为博主原创文章,转载或又一次发表请先与我联系. https://blog.csdn.net/jonahzheng/article/details/27658985 游戏服务端pomelo ...
- bootstrap复习
菜单 <div class="row">下拉菜单/分裂菜单</div> <div class="dropdown btn-group&quo ...