首页 > TAG信息列表 > CQOI2016

luogu P4357 [CQOI2016]K 远点对

题面传送门 KDT还可以做领域查询!只不过复杂度可以卡到单次\(O(n)\) 我们开一个小根堆维护答案,之后将每次答案与堆顶比较。如果答案比堆顶小就加入答案。 我们建立一颗KDT,然后每次计算每个点和当前矩形四个边框中最大的距离,如果这个距离大于当前堆顶,那么直接返回。否则继续递归下去

[CQOI2016]手机号码

[CQOI2016]手机号码 洛谷题目链接 挺经典的一道数位dp题。 题目大意 输入\(l,r\),我们需要求出区间\([l,r]\)内所有包含三个连续相同数字并且不同时包含\(8,4\)的\(11\)位电话号码,需要注意的是,不含前导零并且一定是\(11\)位数字,即最高位大于等于\(1\)。 题解 数位dp的思路就是逐

[ CQOI2016 ] 伪光滑数

题目 Luogu LOJ Acwing 思路 代码 #include <iostream> #include <queue> #define int long long using namespace std; int n, k, P[] = { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 7

luogu P4123 [CQOI2016]不同的最小割

题面传送门 显然我们不能爆枚点对算最小割。 然而这个东西其实可以把最小割树跑出来然后搞。 但是因为求的是种类个数所以连最小割树都不用建出来直接扔到一个map里面即可。 时间复杂度\(O(n^3m)\)但是根本跑不满。 code: #include <vector> #include<iostream> #include<cstdio>

P4357-[CQOI2016]K远点对【K-Dtree】

正题 题目链接:https://www.luogu.com.cn/problem/P4357 题目大意 平面上给出\(n\)个点,求第\(k\)远的点对距离。 解题思路 \(\text{K-Dtree}\)的模板题,但是这里只有二维,大概是每次根据一个维度把\(n\)个点分成两半像线段树一样丢到下面继续分治的思想来构建一棵树。 那么这样分

LOJ#2044. 「CQOI2016」手机号码 数位dp

这次的状态十分复杂,写递推版不现实.    于是学了一下递归版数位dp,感觉比递推版高明多了,好写还好想.   如果以后碰到状态复杂的数位dp的话可以考虑递归版本.    code:  #include <bits/stdc++.h> #define ll long long #define setIO(s) freopen(s".in","r",stdin) usi

luogu P4124 [CQOI2016]手机号码 数位dp

#include<map> #include<queue> #include<time.h> #include<limits.h> #include<cmath> #include<ostream> #include<iterator> #include<set> #include<stack> #include<cstdio> #include<cstring> #incl

「CQOI2016」不同的最小割

「CQOI2016」不同的最小割 传送门 建出最小割树,把每一个点对的最小割抠出来 \(\text{unique}\) 一下就好了。 参考代码: #include <algorithm> #include <cstring> #include <cstdio> #define rg register #define file(x) freopen(x".in", "r", stdin), freopen(x".ou

数位dp(洛谷 P4124 [CQOI2016]手机号码)

题目链接 普通数位dp,不过有几点值得深思。 首先,我们每个手机号的位数固定为11位,即,不满足11位的并不是手机号不满足条件。而且如果像普通数位dp那样求该数到0之间的数量的话,还要考虑前导0的印象。(多开一维数组存前导0)不太值得。所以,我们直接求该数到1e10之间的数: int mx

BZOJ4522 [Cqoi2016]密钥破解

4522: [Cqoi2016]密钥破解Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1039  Solved: 603[Submit][Status][Discuss]Description 一种非对称加密算法的密钥生成过程如下: 1. 任选两个不同的质数 p ,q 2. 计算 N=pq , r=(p-1)(q-1) 3. 选取小于r ,且与 r 互质的整数 e  4.

【luogu4124】【bzoj4521】 [CQOI2016]手机号码 [数位dp]

P4124 [CQOI2016]手机号码 4521 这道题要注意卡上下界 我错了 写dfs版的更好考虑状态 写纯方程转移那个细节把我想瓜了 1 #include<iostream> 2 #include<cstdio> 3 #include<queue> 4 #include<cstring> 5 #include<cmath> 6 #include<stack> 7 #include<algorithm> 8 usi

[CQOI2016]K远点对

题目 这个题好像不是那样板子了 我们考虑维护一个有\(k\)个元素的小根堆,用来存我们当前找到的前\(k\)远点对 如果是暴力的话我们就直接暴力枚举点对,计算距离往这个小根堆里插就好了,非常显然,如果距离甚至小于小根堆的堆顶,我们就没有什么插入的必要了 考虑用\(kdt\)优化这个暴力,我们

【题解】P4124 [CQOI2016]手机号码

\(Desciption:\) 给出区间 \([L,R]\) ,求区间内满足没有 \(4\) 和 \(8\) 同事出现并且一定要有三位连续的相同。 并且一定是十一位的电话号码。 \(Sample\) \(Input:\) 12121284000 12121285550 \(Sample\) \(Output:\) 5 \(Solution:\) 考虑数位dp,一眼就是啊。。。 不然数据

CQOI2016 密钥破解

洛谷传送门   Solution:(非常言简意赅) 首先分解出p,q 用Pollard's Rho算法 算出r 解ed≡1(mod r)的同余方程算出d 用快速幂算出cdmod N 然后没啦   Code: 1 #include<bits/stdc++.h> 2 #define Rg register 3 #define go(i,a,b) for(Rg int i=a;i<=b;i++) 4 #define ll long l