题目:http://codeforces.com/contest/1182/problem/F

注意有绝对值。

那么就是 k*p 对 q 取模,找最接近 \(\frac{q}{2}\) 的结果。

也就是 2*k*p 对 2*q 取模,找最接近 q 的结果。

一个二元组,第一维表示 %2q 后与 q 的距离,第二维表示自己的 编号。

对 n 个二元组排序太花时间。

令 \( g(x) = 2*p*x mod (2*q) \)

把 n 分块,只排序第一个块里的元素。因为 \( g(x+y) = g(x) + g(y) ( mod (2*q) ) \) ,所以其他块里的大小关系也可以通过第一个块的情况得知。

具体来说,设块大小是 bs ,在第 i 块就是要找与 \( q - 2*p*i*bs \) 最接近的元素。

用 lower_bound 的话,为了方便可以使 a[ tot+1 ] = a[ 1 ] , a[ 0 ] = a[ tot ] 。但是不能 a[ 0 ].first = a[ 1 ].first - 2*p , a[ 0 ].second = a[ 1 ].second - 1 ,因为模 2*q 意义下访问 0 就是要访问 tot 而不是真的 0 位置。

一定要注意相同 fir 只能保留最小的 second ,并且别用 unique 因为该函数不能做到刚才那个要求!!!

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define mkp make_pair
#define fi first
#define se second
#define ll long long
using namespace std;
const int N=4e4+,INF=1e9+;
int a,b,p,q,p2,q2,bs,tot;
pair<ll,int> c[N],ans;
int main()
{
int T;scanf("%d",&T);
while(T--)
{
scanf("%d%d%d%d",&a,&b,&p,&q);
p2=*p; q2=*q; bs=sqrt(b-a+); tot=;
for(int i=;i<bs;i++)
c[++tot]=mkp((ll)p2*(a+i)%q2,i);
sort(c+,c+tot+);
//tot=unique(c+1,c+tot+1)-c-1;
tot=;
for(int i=;i<=bs;i++)
if(i==||c[i].fi!=c[i-].fi)
c[++tot]=c[i]; c[]=c[tot]; c[tot+]=c[];//
/*c[0]=mkp((c[1].fi+q2-p2)%q2,c[1].se-1);
c[tot+1]=mkp((c[tot].fi+p2)%q2,c[tot].se+1);*/
int tp=(ll)p2*bs%q2,pls=,pl2=a;//=a
ans=mkp(INF,INF);
for(int i=,d;i<bs;i++,pls=((ll)pls+tp)%q2,pl2+=bs)
{
d=lower_bound(c+,c+tot+,mkp(((ll)q+q2-pls)%q2,))-c-;//-1
ans=min(ans,mkp(abs((c[d].fi+pls)%q2-q),c[d].se+pl2));
ans=min(ans,mkp(abs((c[d+].fi+pls)%q2-q),c[d+].se+pl2));
}
for(int i=a+bs*bs;i<=b;i++)//a+
ans=min(ans,mkp(abs((ll)p2*i%q2-q),i));
printf("%d\n",ans.se);
}
return ;
}

CF 1182F Maximum Sine——根号算法的更多相关文章

  1. 【Luogu】P3396哈希冲突(根号算法)

    题目链接 根号算法真的是博大精深啊……明明是暴力但复杂度就是能过 这也太强了吧!!! 预处理出p<=sqrt(n)的所有情况,耗时n根n 查询: 如果p<=根n,O1查表 如果p>= ...

  2. CF 375B Maximum Submatrix 2[预处理 计数排序]

    B. Maximum Submatrix 2 time limit per test 2 seconds memory limit per test 512 megabytes input stand ...

  3. [置顶] CF 86D Powerful array 分块算法入门,n*sqrt(n)

    简介:分块算法主要是把区间划分成sqrt(n)块,从而降低暴力的复杂度, 其实这算是一种优化的暴力吧,复杂度O(n*sqrt(n)) 题意:给定一个数列:a[i]    (1<= i <= ...

  4. RMQ((Range Minimum/Maximum Query))ST算法

    给定一个数组,求出给定区间[l,r]中元素的最大值或最小值或者最值的索引. 一看到这个题目,简单,看我暴力出奇迹.暴力当然是可行的.但是时间复杂度很高(O(n^2)).线段树,树状数组也可以解决这个问 ...

  5. cf D. Maximum Submatrix 2

    http://codeforces.com/contest/376/problem/D 题意:给你一个矩阵,可以随意排列n行的次序,然后找出全部含有1的子矩阵.输出1的个数. 思路:c[i][j]表示 ...

  6. cf B. Maximum Absurdity

    http://codeforces.com/contest/332/problem/B #include <cstdio> #include <cstring> #includ ...

  7. java实现开根号算法

    public static void main(String[] args) { long start = System.currentTimeMillis(); double target=9876 ...

  8. CF 888E Maximum Subsequence

    一道比较套路的题,看到数据范围就差不多有想法了吧. 题目大意:给一个数列和\(m\),在数列任选若干个数,使得他们的和对\(m\)取模后最大 取膜最大,好像不能DP/贪心/玄学乱搞啊.\(n\le35 ...

  9. CF 888E Maximum Subsequence——折半搜索

    题目:http://codeforces.com/contest/888/problem/E 一看就是折半搜索?……然后排序双指针. 两个<m的数加起来如果>=m,一定不会更新答案.因为- ...

随机推荐

  1. Vue中解决路由切换,页面不更新的实用方法

    前言:vue-router的切换不同于传统的页面的切换.路由之间的切换,其实就是组件之间的切换,不是真正的页面切换.这也会导致一个问题,就是引用相同组件的时候,会导致该组件无法更新,也就是我们口中的页 ...

  2. python接口自动化:调试接口的代码(无token情况下)

    实现代码如下: #接口调试 import requests,time class api_demo1: def __init__(self,RequestWay,url,data): self.s=r ...

  3. 【ABAP系列】SAP ABAP选择屏幕(SELECTION SCREEN)事件解析

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP选择屏幕(SEL ...

  4. sql exist 和not exist(转载)

    exists : 强调的是是否返回结果集,不要求知道返回什么, 比如:  select name from student where sex = 'm' and mark exists(select ...

  5. 小白学Python(12)——pyecharts ,生成词云图 WordCloud

    WordCloud(词云图) from pyecharts import options as opts from pyecharts.charts import Page, WordCloud fr ...

  6. React.memo

    介绍React.memo之前,先了解一下React.Component和React.PureComponent. React.Component React.Component是基于ES6 class ...

  7. C# 委托 多线程

    C#委托和多线程[转载] 很多时候写windows程序都需要结合多线程,在.net中用如下得代码来创建并启动一个新的线程.public void ThreadProc();Thread thread ...

  8. vue路由守卫配合权限,白名单

    router.beforeEach(async(to, from, next) => { // 进度条开始 NProgress.start() // 确认用户是否已登录(获取它的token值,这 ...

  9. ElasticSearch 入门介绍

    tags: 第三方 lucene [toc] 1. what Elastic Search(ES)是什么 全文检索和lucene 全文检索 优点:高效,准确,分词全文检索允许用户输入一些关键字,从数据 ...

  10. vue修改Element的el-table样式

    修改Element中的el-table样式,可以使用以下几种方法: 1. row-style 行的 style 的回调方法,也可以使用一个固定的 Object 为所有行设置一样的 Style. 2. ...