「CF986F」 Oppa Funcan Style Remastered
「CF986F」 Oppa Funcan Style Remastered
首先发现分解成若干个 \(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的更多相关文章
- CF986F Oppa Funcan Style Remastered
CF986F Oppa Funcan Style Remastered 不错的图论转化题! 题目首先转化成:能否用若干个k的非1因数的和=n 其次,因数太多,由于只是可行性,不妨直接都用质因子来填充! ...
- [CF986F]Oppa Funcan Style Remastered[exgcd+同余最短路]
题意 给你 \(n\) 和 \(k\) ,问能否用 \(k\) 的所有 \(>1\) 的因子凑出 \(n\) .多组数据,但保证不同的 \(k\) 不超过 50 个. \(n\leq 10^{1 ...
- codeforces986F Oppa Funcan Style Remastered【线性筛+最短路】
容易看出是用质因数凑n 首先01个因数的情况可以特判,2个的情况就是ap1+bp2=n,b=n/p2(mod p1),这里的b是最小的特解,求出来看bp2<=n则有解,否则无解 然后剩下的情况最 ...
- [Codeforces 485F] Oppa Funcan Style Remastered
[题目链接] https://codeforces.com/contest/986/problem/F [算法] 不难发现 , 每个人都在且仅在一个简单环中 , 设这些环长的长度分别为 A1, A2 ...
- Codeforces 986F - Oppa Funcan Style Remastered(同余最短路)
Codeforces 题面传送门 & 洛谷题面传送门 感谢此题教会我一个东西叫做同余最短路(大雾 首先这个不同 \(k\) 的个数 \(\le 50\) 这个条件显然是让我们对每个 \(k\) ...
- 「CF150E」Freezing with Style「点分治」「单调队列」
题意 给定一颗带边权的树,求一条边数在\(L\).\(R\)之间的路径,并使得路径上边权的中位数最大.输出一条可行路径的两个端点.这里若有偶数个数,中位数为中间靠右的那个. \(n, L, R\leq ...
- 使用「max-height」实现自适应高度
.tab-content{ max-height: 0; overflow: hidden; -webkit-transition: max-height .8s; -moz-transition: ...
- 零元学Expression Blend 4 - Chapter 15 用实例了解互动控制项「Button」I
原文:零元学Expression Blend 4 - Chapter 15 用实例了解互动控制项「Button」I 本章将教大家如何更改Button的预设Template,以及如何在Button内设置 ...
- 「译」JUnit 5 系列:条件测试
原文地址:http://blog.codefx.org/libraries/junit-5-conditions/ 原文日期:08, May, 2016 译文首发:Linesh 的博客:「译」JUni ...
随机推荐
- JMeter36个内置函数及11个新增函数介绍
JMeter内置了36个函数,这些函数可以通过函数助手进行编辑和测试.了解这些函数,不仅能提高JMeter的使用熟练度,也有助于知晓测试工具或测试框架通用的函数有哪些,在自主设计时,作为参考借鉴. J ...
- HTML5之WebSocket(转自知乎)
在认识websocket之前,我们必须了解的是websocket有什么用? 他能解决我们遇到的什么问题? 如果没用,那么我们就么有使用它的必要的. websocket就是建立起全双工协议的,提高了效率 ...
- GPU编程和流式多处理器(六)
GPU编程和流式多处理器(六) 5. 纹理和表面 读取和写入纹理和表面的指令,所引用的隐式状态,比其他指令要多得多.header中包含诸如基地址,尺寸,格式和纹理内容的解释之类的参数,该header是 ...
- 狂神说Mybatis笔记
环境说明: jdk 8 + MySQL 5.7.19 maven-3.6.1 IDEA 学习前需要掌握: JDBC MySQL Java 基础 Maven Junit 第一节:入门 什么是MyBati ...
- 已经安装好了tensorboardX,任然报错 No module named ‘tensorboardX‘ ??
问题: 1.在jupyter notebook网页版中已经使用命令pip install tensorboardX来安装tensorboardX包,但是运行程序时仍旧出现错误:No module na ...
- 必看!LuatOS自定义C库全新教程,一文极速上手
今天继续讲LuatOS的开发,上一期简单说了一下如何移植LuatOS,相信很多朋友已经看过了.那么今天,我就开始讲C和Lua调用的部分教程. LuatOS相关资料及Lua语言的官方定义,详见以下链接: ...
- 【模拟7.16】通讯(tarjan缩点加拓扑排序)
这题确实水,纯板子,考试意外出错,只拿了暴力分QAQ tarjan缩点加上拓扑排序,注意这里求最短路径时不能用最小生成树 因为是单向边,不然就可能不是一个联通图了.... 1 #include< ...
- ORA-01157:cannot identify/lock data file 6 - see DBWR trace file ORA-01110:data file 6:'/u01/app/oracle/oradata/PRDO2/sysaux02.dbf'
- Mac为docker和kubectl添加自动命令补全
我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 前言 自动命令补全是非常有用的功能,特别是当命令有特别多参数时.显然,docker/kubectl就是这样的命令.我们 ...
- 解决“与 Microsoft Exchange 的连接不可用,Outlook 必须联机或已连接才能完成此操作”
Microsoft Outlook 是一种用于发送和接收电子邮件的应用程序.由于其可靠性和各种使用类型,它在企业公司中非常受欢迎.Outlook 还可用于管理各种类型的个人数据,如日历约会.联系人.邮 ...