BZOJ3735 : [Pa2013]Konduktorzy】的更多相关文章

二分一个最大的位置$x$,计算$t=\sum_{i=1}^k\lfloor\frac{x}{a_i}\rfloor$. 如果$t\leq n$,那么说明就算全部检票员都走到了这里,也不够$n$个指令,所以可以先将所有检票员尽量向$x$位置走,并将用掉的指令数扣除. 然后将$x$适当往前调整,使得每个检票员还差至少一步. 因为$a_i$互不相同,并且$a_i\leq 100000$,所以剩余指令数并不多,用堆直接模拟即可. 时间复杂度$O(k\log^2k)$. #include<cstdio>…
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem 10983 18765 Y 1036 [ZJOI2008]树的统计Count 5293 13132 Y 1588 [HNOI2002]营业额统计 5056 13607 1001 [BeiJing2006]狼抓兔子 4526 18386 Y 2002 [Hnoi2010]Bounce 弹飞绵羊 43…
[BZOJ3733][Pa2013]Iloczyn (搜索) 题面 BZOJ 题解 把约数筛出来之后,直接爆搜,再随便剪枝就过了. 最近一句话题解倾向比较严重 #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> #include<vector> using na…
[BZOJ3837][Pa2013]Filary Description 给定n个正整数,从中挑出k个数,满足:存在某一个m(m>=2),使得这k个数模m的余数相等. 求出k的最大值,并求出此时的m.如果有多组解使得k最大,你要在此基础上求出m的最大值. Input 第一行一个正整数n(2<=n<=10^5). 第二行n个正整数w[i](1<=w[i]<=10^7).保证不会出现所有w[i]都相等的情况. Output 一行两个整数k,m.保证答案存在. Sample Inp…
[BZOJ3837][PA2013]Filary 题面 darkbzoj 题解 考虑到模数为\(2\)时答案至少为\(\frac n2\),这是我们答案的下界. 那么我们对于任意的一个数,它们答案集合中的就概率至少为\(\frac 12\). 那么我们随机选出一个数,将这个数与其他数作差,那么将这些数分解质因数后出现次数最多的数的个数就是出现次数,而含有这个质因数的所有数的\(gcd\)就是这种情况. 因为值域\(\leq 10^7\),所以你把每个数最小的质因子筛出来就可以做到\(\log\)…
题意: 求满足\(phi(a)=n\)的\(a\)的个数.(\(n \le 10^{10}\)) 分析 这种题一开始就感觉是搜索= = 题解 首先容易得到 \[\phi(n) = \prod_{i} p_i^{a_i-1} (p_i - 1)\] 然后我们\(O(n^{0.5})\)预处理以下前\(n^{0.5}\)的素因子,然后再用\(O(n^{0.5}log(n))\)筛出大质数,然后从小到大一层一层搜下去即可,注意特判一下\(n=1\)的情况. #include <bits/stdc++.…
Description 一个0/1矩阵,求能覆盖所有 \(1\) ,同时不覆盖所有 \(0\) 的矩阵,使这个面积最大. Sol DP/悬线法. 首先,所求的矩阵一定可以覆盖所有贴边的悬线. 用悬线法求出,高度为 \(r\) 最大的 \(c\) ,宽度为 \(c\) 最大的高度. 上下左右都要做一遍,然后更新统计答案. 上下的时候统计的是每一个高度,左右的时候统计的是每一个宽度. 这样就可以保证所有矩阵都是一个合法的矩阵了. 我多开了几个数组,发现空间炸了...然后我就开始滚了... Code…
首先将$n$的约数从小到大排序,设$dfs(x,y,z)$表示当前可以选第$x$个到第$m$个约数,还要选$y$个,之前选的乘积为$z$是否可能. 爆搜的时候,如果从$x$开始最小的$y$个相乘也超过了$n$,那么就不合法,加上这个剪枝即可. #include<cstdio> #include<algorithm> #define N 2000 int T,n,k,m,i,j,q[N],f[N][22]; int dfs(int x,int y,int z){ if(!y)retu…
对于每个询问,首先可以通过扫描线+线段树求出四个方向的第一个点,询问范围等价于框住这些点的最小矩形. 对于一个点$i$,预处理出: $A[i][j]$:$i$往左下角按凸壳走到$j$时,凸壳上相邻两点的叉积和. $B[i][j]$:$i$往右下角按凸壳走到$j$时,凸壳上相邻两点的叉积和. $C[i][j]$:$i$往左上角按凸壳走到$j$时,凸壳上相邻两点的叉积和. $D[i][j]$:$i$往右上角按凸壳走到$j$时,凸壳上相邻两点的叉积和. 注意到每个数组只有一半有用,所以可以把$AD$合…
将选取的$A$看成左括号,$B$看成右括号,那么答案是一个合法的括号序列. 那么只要重复取出$k$对价值最小的左右括号,保证每时每刻都是一个合法的括号序列即可. 将$($看成$1$,$)$看成$-1$,设$s[]$为前缀和. 如果当前取出的是$()$,那么对前缀和的影响为$[A,B-1]$区间加$1$. 如果当前取出的是$)($,那么对前缀和的影响为$[B,A-1]$区间减$1$,所以这种情况需要满足区间$s$的最小值不为$0$. 考虑用线段树维护这个序列,线段树上每个节点维护以下信息: va:…
当m取2时,k至少为$\frac{n}{2}$ 所以在最优解中每个数被选中的概率至少为$\frac{1}{2}$ 每次随机选取一个位置i,计算出其它数与$a_i$的差值,将差值分解质因数 所有质因数中出现次数的最大值加上与$a_i$相等的数的个数就是选取i的情况下的最优解 为了最大化m,需要将所有相同位置的因数乘起来 给每个位置随机一个权值,全部异或起来求出Hash值,排序后扫一遍统计即可 因为$a_i\leq10^7$,所以可以先一遍线性筛求出每个数是被哪个素数筛掉的,这样就可以做到$O(\l…
从这个FB开始写博客啦. 也不知道会坚持多久…… = =似乎要加一句转载请注明出处 http://www.cnblogs.com/DancingOnTheTree/p/4026076.html http://www.lydsy.com/JudgeOnline/problem.php?id=3737 因为是好玩的数学题所以刚看见的时候就想捉了……但是无限耽搁这两天才处理掉. 交上去各种瑕疵CE…… 改好发现数组开小各种RE…… 然后各种TLE…… 小看数据了= =. 看到题拿各种公式套,似乎是按因…
显然只需要考虑与障碍点相邻的格子,通过旋转坐标系,可以只考虑障碍点在格子上方的情况. 悬线法求出每个点往上的最长延伸距离$x$,以及往左往右的延伸距离$y$. 那么当$r\geq x$时,$c$至多为$y$. 特别地,当某个点下方也是障碍点的时候,$r$不能超过$x$. 维护出每个$r$对应的最大的$c$即可. 时间复杂度$O(nm)$. #include<cstdio> #include<algorithm> const int N=2505; int n,m,i,j,k,l[N…
首先枚举$n$的每个约数$d$,检查一下$d+1$是否是质数,这些数都有可能作为答案的质因子出现. 考虑爆搜,每次枚举下一个要在答案中出现的质因子$p$,将$n$除以$p-1$,再枚举$p$的指数,然后递归搜索. 需要加一些剪枝: $1.$当$n=1$的时候说明找到了一组合法解,直接返回. $2.$只有当$p-1|n$时才有可能有解,因此设$g[i][j]$表示第$i$个约数在第$j$个质数之后第一个能被整除的位置. 那么可以沿着$g$进行枚举,每次枚举到的必然是$n$的约数. $3.$对于如何…
正解:搜索 解题报告: 先放下传送门QwQ umm其实并不难,,,最近在复建基础姿势点所以都写的是些小水题QAQ 首先考虑如果能构造出来一定是因数凑起来鸭,所以先把因数都拆出来,然后就爆搜 几个常见的剪枝就不说了,想cue下最近碰到了好几次的一个 是这样儿的,就以这题为例,可以对所有因数排序,强制从小到大选这种我就不说了太套路了,有一个小check是可以计算出还要乘几个数嘛,这里设已经算出来了是x,然后就把已经乘出来了的数乘以当前最小的x个数,如果大于目标就可以break了 感觉最近碰到了好几次…
题目描述 平面上有n个不重复的点.每次询问一个边平行坐标轴的矩形内(包含边界)的点组成的凸包的面积.. 输入格式 第一行两个整数k,n(1<=k<=1000000,3<=n<=3000). 接下来n行,每行两个整数x_i,y_i(0<=x_i,y_i<=k),表示点的坐标. 接下来一行一个整数m(1<=m<=1000000),表示询问数量. 接下来m行,每行四个整数a,b,c,d(0<=a<b<=k,0<=c<d<=k),…
题面 权限题 题解 这题有一个很好的性质,就是一定有$k>\frac n2$.接着考虑怎么做. 我们随机选取一个数$x$,然后将所有数与它作差,那么只需要找出$k$个差值使得他们的最大公因数大于$1$即可.我们可以将所有差值分解质因数,然后统计每个质因数出现的次数,再加上与$x$相等的数的个数就是$k$.统计$k$个时候顺便记录一下这些数的最大公因数即可. 根据之前说的那个性质,我们随机出真答案的期望是$log$的.但是随机化这个东西...是靠脸的,我最开始用了那个$8$位质数做种子,然后调了$…
Description 给定正整数n和k,问能否将n分解为k个不同正整数的乘积 Input 第一行一个数T(T<=4000)表示测试组数 接下来T行每行两个数n(n<=10^9),k(k<=20) Output 输出T行,若可以被分解,输出”TAK”否则输出”NIE” Sample Input 3 15 2 24 4 24 5 Sample Output TAK TAK NIE 题解 搜索+剪枝,先求出所有因数,然后暴力搜索,剪枝就是如果后面最小的k个数当前数相乘大于n就退出. orz…
Description 给定正整数n和k,问是否能将n分解为k个不同正整数的乘积 Input 第一行一个数T(T<=4000)表示測试组数 接下来T行每行两个数n(n<=10^9),k(k<=20) Output 输出T行,若能够被分解,输出"TAK"否则输出"NIE" Sample Input 3 15 2 24 4 24 5 Sample Output TAK TAK NIE HINT Source 如今BZOJ上不去没有中文题面也没法在BZO…
https://www.zybuluo.com/ysner/note/1300802 题面 给定正整数\(n\)和\(k\),问能否将\(n\)分解为\(k\)个不同正整数的乘积. \(n\leq10^9,k\leq20,T\leq4000\) 解析 这破题目卡常,删了一堆define快一倍 可以发现\(12!=479001600>10^9\). 所以\(n\)顶多被分解成\(11\)个不同正整数. 常规操作:找出所有约数然后\(O(2^{11})\)枚举加剪枝. 然而我不会搜索啊,\(TLE\…
参考:http://www.cnblogs.com/clrs97/p/5125976.html 瞎搞约数失败...滚去搜索 dfs(x,y,z) 表示当前可选第x到第m个约数,还要选y个约数,已有z的乘积,搜的时候减掉大于n的情况 #include<iostream> #include<cstdio> #include<algorithm> using namespace std; const int N=2005; int n,k,tot,q[N],f[N][35];…
bzoj 先搞第一问.考虑简单情况,如果\(m=2\),那么一定有个剩余类大小\(\ge \lceil\frac{n}{2}\rceil\),同时这也是答案下界 然后我们每次随机选出一个数\(a_i\),然后钦定它在我们要的剩余类里,现在再枚举其他数,看一下最多有多少个数\(a_j\)可以和他模\(m\)同余,也就是选最多的数满足\(\gcd(|a_i-a_{j_1}|,|a_i-a_{j_2}|,|a_i-a_{j_3}|...)>1\).那对于每个\(j\),把所有\(|a_i-a_j|\)…
首先考虑题目的性质,不难发现光盘的花费是一个凸函数.当生产 \(0\) 张光盘时,其花费为 \(0\),随着光盘生产数的增加,最优情况肯定是先选择工厂便宜的时刻,所以花费会增长越来越快,因此其为一个下凸的凸函数. 采用 \(WQS\) 二分来优化掉生产出 \(k\) 张光盘的限制,然后可以通过二分图带权匹配来判定.每个 \(b\) 向其之前所有的 \(a\) 连边,表示可以进行匹配来生产光盘,当匹配的权值为正时就停止匹配,用匹配数来判定二分. 但是这样复杂度无法接受,于是采用模拟费用流的方法,用…
赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noip前的杂题训练,我也很无奈啊 做完了的扔最后,欢迎好题推荐 这么多题肯定是完不成了,能多做一道是一道吧 DP yyb真是强得不要不要的辣:http://www.cnblogs.com/cjyyb/category/1036536.html [ ] [SDOI2010]地精部落 https://www…
3837: [Pa2013]Filary Time Limit: 60 Sec  Memory Limit: 256 MBSubmit: 395  Solved: 74[Submit][Status][Discuss] Description 给定n个正整数,从中挑出k个数,满足:存在某一个m(m>=2),使得这k个数模m的余数相等.   求出k的最大值,并求出此时的m.如果有多组解使得k最大,你要在此基础上求出m的最大值.   Input 第一行一个正整数n(2<=n<=10^5).…
3733: [Pa2013]Iloczyn Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 741  Solved: 217[Submit][Status][Discuss] Description 给定正整数n和k,问能否将n分解为k个不同正整数的乘积 Input 第一行一个数T(T<=4000)表示测试组数 接下来T行每行两个数n(n<=10^9),k(k<=20) Output 输出T行,若可以被分解,输出"TAK"…