51nod1026 矩阵中不重复的元素 V2
$n \leq 500000,m \leq 500000$的矩阵,第一行第一列是$a^b,2 \leq a,b \leq 500000$,如果一个数是$i^j$那他右边是$i^{j+1}$,下面是${i+1}^{j}$,问这个矩阵里有多少不同的数字。
把数字化成“基”来统筹统计一些重复情况。意思就是:$a=\prod_{i=1}^{k}p_i^{b_i}$,其中$gcd(b_1,b_2,...,b_k)=1$,那么这些$a$就可以当基,他的若干次幂在比他小的行中一定不会出现,而他的平方,三次方,这些行可能会跟他有部分重复。因此这些行单独拿出来考虑。可以看一下次数:
$a^{1*1} \ \ a^{1*2} \ \ a^{1*3}...$
$a^{2*1} \ \ a^{2*2} \ \ a^{2*3}...$
$a^{3*1} \ \ a^{3*2} \ \ a^{3*3}...$
如此,只需要在这样的矩形里的一段连续行中去重就可以了。一次考虑一个记,元素总数是$log_an*m$的,但总的元素总数仍是$n*m$的。
可以观察到,随着基变大,这个抽象出来的矩形的连续行(叫$[L,R]$)的$L$和$R$都会变小。而这个矩形的数字范围只有$mlogn$,可以开个桶来算每次多出或损失的行。总复杂度变成这个矩形的元素总数$mlogn$。
V3暂时不会QAQ是用容斥的观点进行搜索+剪枝的,希望能回来填坑。
//#include<iostream>
#include<cstring>
#include<cstdio>
//#include<time.h>
//#include<complex>
//#include<set>
#include<queue>
//#include<vector>
#include<algorithm>
#include<stdlib.h>
using namespace std; #define LL long long
int qread()
{
char c; int s=,f=; while ((c=getchar())<'' || c>'') (c=='-') && (f=-);
do s=s*+c-''; while ((c=getchar())>='' && c<=''); return s*f;
} //Pay attention to '-' , LL and double of qread!!!! int n,m,a,b;
#define maxn 1000011
#define maxm 10000011 //int prime[maxn],lp,xx[maxn]; bool notprime[maxn];
//void makeprime(int n)
//{
// lp=0;
// for (int i=2;i<=n;i++)
// {
// if (!notprime[i]) {prime[++lp]=i; xx[i]=i;}
// for (int tmp,j=1;j<=lp && 1ll*i*prime[j]<=n;j++)
// {
// notprime[tmp=i*prime[j]]=1; xx[tmp]=prime[j];
// if (!(i%prime[j])) break;
// }
// }
//} int cnt[maxm]; bool vis[maxn];
int main()
{
m=qread(); n=qread(); a=qread(); b=qread(); int N=a+n-,M=b+m-;
// makeprime(a+n); int L=,R=; while ((<<L)<a) vis[<<L]=,L++; while ((<<R)>N) R--;
// cout<<L<<' '<<R<<endl;
for (int i=L;i<=R;i++) vis[<<i]=;
LL ans=; int now=;
for (int j=L,tmp;j<=R;j++)
for (int k=b;k<=M;k++)
{
if (cnt[tmp=j*k]==) now++;
cnt[tmp]++;
}
ans+=now;
for (int i=;i<=N;i++) if (!vis[i])
{
int nl=,nr=; LL tmp=;
for (;tmp<a;tmp*=i,nl++) vis[tmp]=;
nr=nl; for (;tmp<=N;tmp*=i,nr++) vis[tmp]=; nr--;
// cout<<nl<<' '<<nr<<endl;
for (int j=L-;j>=nl;j--)
for (int k=b;k<=M;k++)
{
if (cnt[tmp=j*k]==) now++;
cnt[tmp]++;
}
L=nl;
for (int j=R;j>nr;j--)
for (int k=b;k<=M;k++)
{
cnt[tmp=j*k]--;
if (cnt[tmp]==) now--;
}
R=nr;
ans+=now;
}
printf("%lld\n",ans);
return ;
}
51nod1026 矩阵中不重复的元素 V2的更多相关文章
- 1007 正整数分组 1010 只包含因子2 3 5的数 1014 X^2 Mod P 1024 矩阵中不重复的元素 1031 骨牌覆盖
1007 正整数分组 将一堆正整数分为2组,要求2组的和相差最小. 例如:1 2 3 4 5,将1 2 4分为1组,3 5分为1组,两组和相差1,是所有方案中相差最少的. Input 第1行:一个 ...
- 51nod 1024 矩阵中不重复的元素
1024 矩阵中不重复的元素 题目来源: Project Euler 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 一个m*n的矩阵. 该矩阵的 ...
- [51NOD1024] 矩阵中不重复的元素(数学,精度)
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1024 因为n和m都到100了,所以直接快速幂硬算一定会爆炸,考 ...
- 51Nod 1024 矩阵中不重复的元素 | 技巧 数学
first try: set<LL> sset; int main() { LL m,n,a,b; while(~scanf("%lld%lld%lld%lld",&a ...
- Java基础知识强化之集合框架笔记27:ArrayList集合练习之去除ArrayList集合中的重复字符串元素
1. 去除ArrayList集合中的重复字符串元素(字符串内容相同) 分析: (1)创建集合对象 (2)添加多个字符串元素(包含重复的) (3)创建新的集合 (4)遍历旧集合,获取得到每一个元素 (5 ...
- linq 根据指定条件返回集合中不重复的元素
原理:先查询出数据,根据指定值分组,然后取第一条映射 1.第一种方法 string sql = string.Format("select*from PoliceLogistcs); db. ...
- c编程:求出4×4矩阵中最大和最小元素值及其所在行下标和列下标,求出两条主对角线元素之和。
//求出4×4矩阵中最大和最小元素值及其所在行下标和列下标,求出两条主对角线元素之和 #include <stdio.h> int main() { int sum=0; int max, ...
- 有序矩阵中第k小元素
有序矩阵中第k小元素 题目: 给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素. 请注意,它是排序后的第 k 小元素,而不是第 k 个不同的元素. 看到有序就会想 ...
- javascript 返回数组中不重复的元素
这是实现结构伪类type-of-type的部分代码: <script type="text/javascript"> var ret= ["span" ...
随机推荐
- 爆零系列—补题A
http://codeforces.com/contest/615/problem/A 读错题 结果发现是无脑题 直接标记统计 #include<cstdio> #include< ...
- Ace 在HTML中使用方法
<!DOCTYPE html> <html> <head> <title>Demo of ACE Editor</title> <!- ...
- Vue+webpack+echarts+jQuery=demo
需要的插件: "dependencies": { "bootstrap": "^3.3.7", "echarts": & ...
- word2vec 中的数学原理详解(二)预备知识
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/peghoty/article/details/37969635 https://blog.csdn. ...
- ajax通信
AJAX即Asynchronous JavaScript and XML(异步的 JavaScript 和 XML),可以在不重新加载整个网页的基础上,对网页的某部分进行更新. XMLHttpRequ ...
- windows10锁定屏幕聚焦图片导出
打开运行,输入%LocalAppData%\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalState\Ass ...
- MacBook Pro休眠掉电、耗电量大问题解决方案
1.前言 最近我的2015mbpMacBook Pro (Retina, 13-inch, early 2015)更新完10.14系统后,发现休眠待机一晚上后能掉5%电,白天待机4-5小时又掉了8%. ...
- lnmp一键安装包 虚拟主机问题
lnmp一键安装包淌过的坑 --手动虚拟主机配置 安装一键包的时候教程 官网也有虚拟主机的教程 一下示例: 后来自己手动去做 就遇到了一个大家都遇到的问题 及时安装让nginx支持解析PHP脚本解析 ...
- 日志平台-ELK6.4
一.环境 linux-node1 192.168.127.201 linux-node2 192.168.127.202 centos7.3 elasticsearch6.4 logstash6.4 ...
- Python函数高级
函数对象 在面向对象编程中 一切皆对象 函数在python中是第一类对象 函数可以这么用 可以被引用 def func(): print('hello world !') f=func f() 可 ...