「CF986F」 Oppa Funcan Style Remastered

Link

首先发现分解成若干个 \(k\) 的因数很蠢,事实上每个因数都是由某个质因子的若干倍组成的,所以可以将问题转换为分解成若干个 \(k\) 的质因子之和。

此时质因子个数最多也就 \(12\) 个。

然后就不会了。

注意到题目可以转化为判断 \(\sum_{i=1}^kp_ix_i=n\) 是否有非负整数解。

且若 \(\sum_{i=1}^kp_ix_i=m\) 有解,则 \(\sum_{i=1}^kp_ix_i=m+p_i(1\le i\le k)\)一定 有解。

我们考虑在 \(\bmod p\) 意义下建出一张图。在 \((i,(i+p_i)\bmod p)\) 之间连边,然后跑最短路。

最后我们就只需要判断 \(\mathrm{dis}_{n\bmod p}\) 与 \(n\) 的大小关系即可。

注意本题在质因子个数 \(\le 2\) 时需要特判。

/*---Author:HenryHuang---*/
/*---Never Settle---*/
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll maxn=4e6+5;
ll pri[maxn],cnt;
bool p[maxn*9];
ll P;
void init(){
for(ll i=2;i<=P;++i){
if(!p[i]) pri[++cnt]=i;
for(ll j=1;j<=cnt&&i*pri[j]<=P;++j){
p[i*pri[j]]=1;
if(i%pri[j]==0) break;
}
}
}
ll a[50],tot;
ll dis[100005];
vector<pair<int,int> > e[100005];
priority_queue<pair<ll,ll> > Q;
void exgcd(ll a,ll b,ll &x,ll &y){
if(!b){
x=1,y=0;
return ;
}
exgcd(b,a%b,y,x);
y-=a/b*x;
}
ll gcd(ll a,ll b){
if(!b) return a;
return gcd(b,a%b);
}
map<ll,ll> mp;
ll owo=0;
vector<pair<ll,ll>> q[100];
ll ans[10010];
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
ll T;cin>>T;P=sqrt(1e15+0.5);init();
for(ll _=1;_<=T;++_){
ll n,k;cin>>n>>k;
if(!mp[k]) mp[k]=++owo;
q[mp[k]].emplace_back(n,_);
}
for(auto xs:mp){
ll k,u;tie(k,u)=xs;tot=0;
for(ll i=1;i<=cnt&&1ll*pri[i]*pri[i]<=k;++i){
if(k%pri[i]==0){
a[++tot]=pri[i];
while(k%pri[i]==0) k/=pri[i];
}
}
if(k!=1) a[++tot]=k;
if(k==1){
for(auto x:q[u]){
ll n,id;tie(n,id)=x;
ans[id]=0;
}
}
else if(tot==1){
for(auto x:q[u]){
ll n,id;tie(n,id)=x;
if(n%a[1]) ans[id]=0;
else ans[id]=1;
}
}
else if(tot==2){
ll x,y;
exgcd(a[1],a[2],x,y);
x=(x%a[2]+a[2])%a[2];
for(auto xx:q[u]){
ll n,id;tie(n,id)=xx;
ll tx=n%a[2]*x%a[2];
ll ty=(n-a[1]*tx)/a[2];
if(ty<0) ans[id]=0;
else ans[id]=1;
}
}
else{
memset(dis,0x3f,sizeof dis);
for(ll i=0;i<a[1];++i) e[i].clear();
for(ll i=2;i<=tot;++i)
for(ll j=0;j<a[1];++j)
e[j].emplace_back((j+a[i])%a[1],a[i]);
dis[0]=0;Q.emplace(0,0);
while(!Q.empty()){
ll u;ll d;
tie(d,u)=Q.top();Q.pop();
d=-d;
if(d!=dis[u]) continue;
for(auto x:e[u]){
ll v,w;tie(v,w)=x;
if(dis[v]>dis[u]+w){
dis[v]=dis[u]+w;
Q.emplace(-dis[v],v);
}
}
}
for(auto x:q[u]){
ll n,id;tie(n,id)=x;
if(dis[n%a[1]]<=n) ans[id]=1;
else ans[id]=0;
}
}
}
for(ll i=1;i<=T;++i){
cout<<(ans[i]?"YES":"NO")<<'\n';
}
return 0;
}

「CF986F」 Oppa Funcan Style Remastered的更多相关文章

  1. CF986F Oppa Funcan Style Remastered

    CF986F Oppa Funcan Style Remastered 不错的图论转化题! 题目首先转化成:能否用若干个k的非1因数的和=n 其次,因数太多,由于只是可行性,不妨直接都用质因子来填充! ...

  2. [CF986F]Oppa Funcan Style Remastered[exgcd+同余最短路]

    题意 给你 \(n\) 和 \(k\) ,问能否用 \(k\) 的所有 \(>1\) 的因子凑出 \(n\) .多组数据,但保证不同的 \(k\) 不超过 50 个. \(n\leq 10^{1 ...

  3. codeforces986F Oppa Funcan Style Remastered【线性筛+最短路】

    容易看出是用质因数凑n 首先01个因数的情况可以特判,2个的情况就是ap1+bp2=n,b=n/p2(mod p1),这里的b是最小的特解,求出来看bp2<=n则有解,否则无解 然后剩下的情况最 ...

  4. [Codeforces 485F] Oppa Funcan Style Remastered

    [题目链接] https://codeforces.com/contest/986/problem/F [算法] 不难发现 , 每个人都在且仅在一个简单环中 , 设这些环长的长度分别为 A1, A2 ...

  5. Codeforces 986F - Oppa Funcan Style Remastered(同余最短路)

    Codeforces 题面传送门 & 洛谷题面传送门 感谢此题教会我一个东西叫做同余最短路(大雾 首先这个不同 \(k\) 的个数 \(\le 50\) 这个条件显然是让我们对每个 \(k\) ...

  6. 「CF150E」Freezing with Style「点分治」「单调队列」

    题意 给定一颗带边权的树,求一条边数在\(L\).\(R\)之间的路径,并使得路径上边权的中位数最大.输出一条可行路径的两个端点.这里若有偶数个数,中位数为中间靠右的那个. \(n, L, R\leq ...

  7. 使用「max-height」实现自适应高度

    .tab-content{ max-height: 0; overflow: hidden; -webkit-transition: max-height .8s; -moz-transition: ...

  8. 零元学Expression Blend 4 - Chapter 15 用实例了解互动控制项「Button」I

    原文:零元学Expression Blend 4 - Chapter 15 用实例了解互动控制项「Button」I 本章将教大家如何更改Button的预设Template,以及如何在Button内设置 ...

  9. 「译」JUnit 5 系列:条件测试

    原文地址:http://blog.codefx.org/libraries/junit-5-conditions/ 原文日期:08, May, 2016 译文首发:Linesh 的博客:「译」JUni ...

随机推荐

  1. 设计模式Copy-on-write

    1.Copy-on-Write 又称COW,写时复制 String的replace()方法,没有修改内部的value数组,而是新创建了一个不可变对象 这种方法在解决不可变对象时,经常使用 这其实就是一 ...

  2. ADAS可行驶区域道路积水反光区域的识别算法

    ADAS可行驶区域道路积水反光区域的识别算法 Water logging area reflecting recognition algorithm for ADAS 1. 工程概要 1.1  概述: ...

  3. CVPR2020无人驾驶论文摘要

    CVPR2020无人驾驶论文摘要 无人 导读/ Starsky是一种比较独特的方案.它是在高速上自动驾驶,第一公里最后一公里采用远程驾驶的模式,Starsky的卡车可以由人类远程操作.没有使用较为昂贵 ...

  4. X-Deep Learning功能模块

    X-Deep Learning功能模块 特征体系 样本 特征 网络 数据准备 样本格式 使用DataReader读取数据 自定义python reader 定义模型 稀疏部分 稠密部分 优化器 训练模 ...

  5. NVIDIA Nsight Systems CUDA 跟踪

    NVIDIA Nsight Systems CUDA 跟踪 CUDA跟踪 NVIDIA Nsight Systems能够捕获有关在概要过程中执行CUDA的信息. 可以在报告的时间轴上收集和呈现以下信息 ...

  6. Linux学习笔记:用户与用户组

    基本概念 Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统. 用户 也就是说任何需要使用操作系统的用户,都 ...

  7. 读HikariCP源码学Java(二)—— 因地制宜的改装版ArrayList:FastList

    前言 如前文所述,HikariCP为了提高性能不遗余力,其中一个比较特别的优化是它没有直接使用ArrayList,而是自己实现了FastList,因地制宜,让数组的读写性能都有了一定程度的提高. 构造 ...

  8. 【Azure 环境】由为存储账号(Storage Account)拒绝分配权限而引出的Azure 蓝图(Blueprint)使用问题

    问题描述 当打开Azure存储账号(Storage Account)门户页面时,从 "访问控制(标识和访问管理)" 页面中发现有"拒绝分配"的功能,所以就思考, ...

  9. 重新整理 .net core 实践篇—————路由和终结点[二十三]

    前言 简单整理一下路由和终节点. 正文 路由方式主要有两种: 1.路由模板方式 2.RouteAttribute 方式 路由约束: 1.类型约束 2.范围约束 3.正则表达式 4.是否必选 5.自定义 ...

  10. 【无线通信篇01 | Zstack协议栈】CC2530 Zigbee Zstack协议栈组网项目及详细讲解篇

    演示视频:https://www.bilibili.com/video/BV1Ew411o7Fp 物联网无线通信技术,ZigBee无线传感网络 CC2530最大的特点就是一个拥有无线收发器(RF)的单 ...