CF 1182F Maximum Sine——根号算法
题目: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——根号算法的更多相关文章
- 【Luogu】P3396哈希冲突(根号算法)
题目链接 根号算法真的是博大精深啊……明明是暴力但复杂度就是能过 这也太强了吧!!! 预处理出p<=sqrt(n)的所有情况,耗时n根n 查询: 如果p<=根n,O1查表 如果p>= ...
- CF 375B Maximum Submatrix 2[预处理 计数排序]
B. Maximum Submatrix 2 time limit per test 2 seconds memory limit per test 512 megabytes input stand ...
- [置顶] CF 86D Powerful array 分块算法入门,n*sqrt(n)
简介:分块算法主要是把区间划分成sqrt(n)块,从而降低暴力的复杂度, 其实这算是一种优化的暴力吧,复杂度O(n*sqrt(n)) 题意:给定一个数列:a[i] (1<= i <= ...
- RMQ((Range Minimum/Maximum Query))ST算法
给定一个数组,求出给定区间[l,r]中元素的最大值或最小值或者最值的索引. 一看到这个题目,简单,看我暴力出奇迹.暴力当然是可行的.但是时间复杂度很高(O(n^2)).线段树,树状数组也可以解决这个问 ...
- cf D. Maximum Submatrix 2
http://codeforces.com/contest/376/problem/D 题意:给你一个矩阵,可以随意排列n行的次序,然后找出全部含有1的子矩阵.输出1的个数. 思路:c[i][j]表示 ...
- cf B. Maximum Absurdity
http://codeforces.com/contest/332/problem/B #include <cstdio> #include <cstring> #includ ...
- java实现开根号算法
public static void main(String[] args) { long start = System.currentTimeMillis(); double target=9876 ...
- CF 888E Maximum Subsequence
一道比较套路的题,看到数据范围就差不多有想法了吧. 题目大意:给一个数列和\(m\),在数列任选若干个数,使得他们的和对\(m\)取模后最大 取膜最大,好像不能DP/贪心/玄学乱搞啊.\(n\le35 ...
- CF 888E Maximum Subsequence——折半搜索
题目:http://codeforces.com/contest/888/problem/E 一看就是折半搜索?……然后排序双指针. 两个<m的数加起来如果>=m,一定不会更新答案.因为- ...
随机推荐
- python读写ini配置文件
像邮箱等信息是可以写在配置文件里面的,python有一个配置模块ConfigParser,可以处理配置文件信息 目录 1.配置模块ConfigParser 2.基本应用 1.配置模块ConfigPar ...
- TCP为什么要三次握手和四次挥手
http://www.jellythink.com/archives/705 简析TCP的三次握手与四次分手 https://zhuanlan.zhihu.com/p/24001696 计算机网络面试 ...
- virutalenv一次行安装多个requirements里的文件
- ssm项目的创建思路
·DAO层: 代码:pojo.映射文件.接口文件——Mybatis逆向工程自动生成 配置:ApplicationContext-dao.xml——数据源.连接池.会话工厂.mapper包扫描 ·Ser ...
- instanceof和getClass的区别
instanceof对比getClass: instanceof 比较的是继承关系或者实现关系的类类型,子类对象或者实现类对象放在前面:而getClass得到的是确切的类型,并不考虑继承,它判断的是引 ...
- [Codeforces 1205B]Shortest Cycle(最小环)
[Codeforces 1205B]Shortest Cycle(最小环) 题面 给出n个正整数\(a_i\),若\(a_i \& a_j \neq 0\),则连边\((i,j)\)(注意i- ...
- Educational Codeforces Round 60 (Rated for Div. 2) D. Magic Gems(矩阵快速幂)
题目传送门 题意: 一个魔法水晶可以分裂成m个水晶,求放满n个水晶的方案数(mol1e9+7) 思路: 线性dp,dp[i]=dp[i]+dp[i-m]; 由于n到1e18,所以要用到矩阵快速幂优化 ...
- 树莓派Pi账户密码简单重置
由于经常忘记树莓派Pi账户的密码而导致无法正常的玩树莓派,本篇文章综合网上的教程,总结了两种快速重置树莓派Pi账户密码的方法,以下一切操作都需在树莓派本机上进行操作. 方法一: 打开终端,执行 sud ...
- BUUCTF--findit
测试文件:https://buuoj.cn/files/7b8602971727c6c82ec0d360d5cad2c0/6a428ff2-25d7-403c-b28e-3f980a10a5a2.ap ...
- Python2 安装教程
目录 1. 推荐阅读 2. 安装包下载 3. 安装步骤 1. 推荐阅读 Python基础入门一文通 | Python2 与Python3及VSCode下载和安装.PyCharm破解与安装.Python ...