首页 > 其他分享 >CF222C Reducing Fractions 题解

CF222C Reducing Fractions 题解

时间:2022-09-06 21:27:32浏览次数:92  
标签:std Fractions cnt int 题解 long CF222C using include

虽然是朴素的筛法,但是跑的比希儿的 Pollard-rho 快。
\(\mathcal O(n\sqrt n)\) 的质因数分解是不行的,Pollard-rho 的码量也过于麻烦,直接在线性筛里筛出每个数的最小质因子,怎么筛?线性筛的本质是每个数只会被自己的最小质因子筛到,记录即可。
对分母分子每个数筛出来的质因子放入桶里,对两个桶取 min 就是要除掉的部分。
再对分母分子进行筛,如果筛出来的质因子在桶里有,把桶里的计数减去 1,否则就不去除这个数。
代码(略有压行):

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cassert>
#define siz(x) int((x).size())
#define cauto const auto
#define all(x) (x).begin(),(x).end()
#define fi first
#define se second
using std::cin;using std::cout;
using loli=long long;
using uloli=unsigned long long;
using lodb=long double;
using venti=__int128_t;
using pii=std::pair<int,int>;
using inlsi=const std::initializer_list<int>&;
constexpr venti operator""_vt(uloli x){return venti(x);}
constexpr int N=1e7+1;
int n,m,mif[N];
std::basic_string<int>pt,ans1,ans2;
bool pr[N];
pii cnt[N];
signed main(){
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	std::ios::sync_with_stdio(false);cin.tie(nullptr);
	for(int i=2;i<N;i++){if(!pr[i])pt+=i,mif[i]=i;for(int j:pt){if(i*j>=N)break;pr[i*j]=true;mif[i*j]=j;if(i%j==0)break;}}
	cin>>n>>m;
	for(int i=1,x;i<=n;i++)for(int p=mif[cin>>x,ans1+=x,x];x!=1;p=mif[x/=p])cnt[p].fi++;
	for(int i=1,x;i<=m;i++)for(int p=mif[cin>>x,ans2+=x,x];x!=1;p=mif[x/=p])cnt[p].se++;
	for(int i=1,x;i<N;i++)if(cnt[i].fi<cnt[i].se)cnt[i].se=cnt[i].fi;else cnt[i].fi=cnt[i].se;
	cout<<n<<' '<<m<<'\n';
	for(int y;int x:ans1){for(int p=mif[y=1,x];x!=1;p=mif[x/=p])if(cnt[p].fi>0)cnt[p].fi--;else y*=p;cout<<y<<' ';}
	cout<<'\n';
	for(int y;int x:ans2){for(int p=mif[y=1,x];x!=1;p=mif[x/=p])if(cnt[p].se>0)cnt[p].se--;else y*=p;cout<<y<<' ';}
	return 0;
}

标签:std,Fractions,cnt,int,题解,long,CF222C,using,include
From: https://www.cnblogs.com/bxjz/p/CF222C.html

相关文章

  • 2022/09/26小测 题解
    (本文将笔者测试时的想法及赛后想法均写出来了)题目:话说某某在\(cj\)校运会上异军突起,其实不是偶然,而是有历史原因的。时光回溯到\(XX\)年前,某某为了心中的理想,每天爬......
  • C#、IIS获取时间带星期或日期问题解决
    cmd   regedit打开注册表,进入到[HKEY_USERS\.DEFAULT\Control Panel\International]  ,然后1、将键 sDate 的值由 / 改为 - 2、将键 sShortDate 的值由 yyyy......
  • 题解【CF1316E Team Building】网络流做法
    题目传送门。一眼费用流。然后发现题解区竟然全是状压DP?????推销一下本题状压DP的题解。那么我就来yy一下我的网络流做法吧,我会尽量把网络流的想法讲得自然一点。考......
  • CSP集训题解
    CSP集训题解Summer已经完结了于是新开一个,而且旧的已经很卡了9.5CSP-S短赛1(开小灶1)T1ZZH的游戏实际上把策略想明白就很简单。以一次连续的移动为一个阶段,每个阶段都必......
  • CF1615F LEGOndary Grandmaster 题解
    CF1615FLEGOndaryGrandmaster对于两个长度为\(n\)的\(01\)串\(s,t\),你可以对\(s\)进行两种操作:把相邻两个\(0\)变成\(1\)或把相邻两个\(1\)变成\(0\),......
  • CF1717A题解
    题目\[\text{lcm}(a,b)=\frac{a\timesb}{\gcd(a,b)}\]\[\frac{\text{lcm}(a,b)}{\gcd(a,b)}=\frac{a}{\gcd(a,b)}\times\frac{b}{\gcd(a,b)}\]\[\frac{a}{\gcd(a,b)}\t......
  • 题解【P2466 [SDOI2008] Sue 的小球】
    题目传送门。一眼丁真,鉴定为原题。现将所有点按照\(x\)排序,区间\([l,r]\)的终点一定是\(l\)或\(r\),否则会跑冤枉路。设\(f_{i,j,0/1}\)表示在区间\([i,j]\)......
  • 1217F 不是题解
    图,动态,连通性,假装强制在线但并不是。 线段树分治是什么?沿着时间建线段树,把logn个操作插到线段树里面,然后就可以简单的增/删了这一题,把可能的两条边都插入线段树。到......
  • 【题解】做题记录(2022.9)
    可能会断断续续的,是因为可能有的时候忘记了写记录9.5今天搞了一天的平衡树,但大部分都是比较基础的操作[SHOI2009]会场预约题目分析:set大法吼啊我们考虑重新定义两个......
  • noi.ac#15 题解
    做了一下午还多,完全独立完成。题意很简单:给树加一条边使得最大匹配数增加1。什么样的边\((a,b)\)满足条件呢?很明显,当且仅当存在一个最大匹配不选\(a,b\)。此时加上\(......