CF986F Oppa Funcan Style Remastered

不错的图论转化题!

题目首先转化成:能否用若干个k的非1因数的和=n

其次,因数太多,由于只是可行性,不妨直接都用质因子来填充!

即:是否存在ai,使得∑ai*pi=n

经典套路:同余系最短路!

最小质因子p0,n一定是若干p0和其他的数凑出来的

dis[i]表示,%p0=i的数用pi来凑出来,最小是多少。最短路即可。

如果dis[n%p0]<=n,那么一定可以!

把询问离线,按照k依次处理。

一些特殊情况:

k=1,全都是NO

k是质数,特判

k是p1,p2两个质因子,这时最短路点数可能是3e7的,会TLE,于是解不定方程:x*p1+y*p2=n是否有x,y的自然数解。注意很可能爆long long,所以x=(n/g)%(p2/g)*x%(p2/g)

k有三个以上质因子,点数最多1e5,同余系最短路。

质因数分解可以暴力分解,线性筛出根号1e15的质数,总分解复杂度<50*4000000

#include<bits/stdc++.h>
#define reg register int
#define il inline
#define fi first
#define se second
#define mk(a,b) make_pair(a,b)
#define numb (ch^'0')
#define pb push_back
#define solid const auto &
#define enter cout<<endl
#define pii pair<int,int>
using namespace std;
typedef long long ll;
template<class T>il void rd(T &x){char ch;x=0;bool fl=false;while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);for(x=numb;isdigit(ch=getchar());x=x*10+numb);(fl==true)&&(x=-x);}
template<class T>il void output(T x){if(x/10)output(x/10);putchar(x%10+'0');}
template<class T>il void ot(T x){if(x<0) putchar('-'),x=-x;output(x);putchar(' ');}
template<class T>il void prt(T a[],int st,int nd){for(reg i=st;i<=nd;++i) ot(a[i]);putchar('\n');}
namespace Modulo{
const int mod=998244353;
int ad(int x,int y){return (x+y)>=mod?x+y-mod:x+y;}
void inc(int &x,int y){x=ad(x,y);}
int mul(int x,int y){return (ll)x*y%mod;}
void inc2(int &x,int y){x=mul(x,y);}
int qm(int x,int y=mod-2){int ret=1;while(y){if(y&1) ret=mul(x,ret);x=mul(x,x);y>>=1;}return ret;}
}
//using namespace Modulo;
namespace Miracle{
const int N=1e5+5;
const int M=31622776+3;
int m;
struct qs{ll n,k,id;bool friend operator <(qs a,qs b){return a.k<b.k;}
}q[N];
int ans[N];
vector<ll>yin;
int pri[4000000+5],cnt;
bool vis[M];
void sieve(int n){for(reg i=2;i<=n;++i){if(!vis[i]){pri[++cnt]=i;}for(reg j=1;j<=cnt;++j){if(i*pri[j]>n) break;vis[i*pri[j]]=1;if(i%pri[j]==0) break;}}
}
ll dis[N];
queue<int>Q;
void spfa(int mod){memset(dis,0x3f,sizeof dis);// for(solid y:yin){//     // cout<<" yy "<<y<<endl;// }dis[0]=0;Q.push(0);while(!Q.empty()){int x=Q.front();Q.pop();vis[x]=0;// cout<<"xx "<<x<<endl;for(reg i=1;i<yin.size();++i){int y=(x+yin[i])%mod;if(dis[y]>dis[x]+yin[i]){dis[y]=dis[x]+yin[i];if(!vis[y]){vis[y]=1;Q.push(y);}}}}
}
void divi(ll K){yin.clear();ll tmp=K;for(reg i=1;(ll)pri[i]*pri[i]<=tmp&&i<=cnt;++i){if(tmp%pri[i]==0){yin.pb(pri[i]);while(tmp%pri[i]==0) tmp/=pri[i];}}if(tmp!=1) yin.pb(tmp);
}
ll exgcd(ll a,ll b,ll &x,ll &y){if(!b){x=1;y=0;return a;}ll ret=exgcd(b,a%b,y,x);y-=(a/b)*x;return ret;
}
int main(){rd(m);ll mx=0;for(reg i=1;i<=m;++i){rd(q[i].n);rd(q[i].k);q[i].id=i;mx=max(mx,q[i].k);}mx=sqrt(mx);sieve(mx);memset(vis,0,mx+1);// prt(vis,0,mx);sort(q+1,q+m+1);int typ=0;for(reg i=1;i<=m;++i){if(q[i].k!=q[i-1].k){divi(q[i].k);typ=0;if(q[i].k==1) typ=0;else if(yin.size()==1) typ=1;else if(yin.size()==2) typ=2;else{typ=3;int mod=yin[0];spfa(mod);}}// cout<<" typ "<<typ<<endl;// prt(dis,0,yin[0]-1);if(typ==0){ans[q[i].id]=0;}else if(typ==1){if(q[i].n%yin[0]==0){ans[q[i].id]=1;}}else if(typ==2){// cout<<" typ==2 "<<endl;
            ll x,y;ll g=exgcd(yin[0],yin[1],x,y);// cout<<" gg "<<g<<" "<<yin[0]<<" "<<yin[1]<<endl;// cout<<"st "<<x<<" "<<y<<" : "<<x*yin[0]+y*yin[1]<<endl;ll md=yin[1]/g;x=(x%md+md)%md;if(q[i].n%g==0){x=(q[i].n/g)%md*x%md;y=(q[i].n-x*yin[0])/yin[1];// cout<<" x "<<x<<" y "<<y<<endl;// cout<<" eql "<<x*yin[0]+y*yin[1]<<endl;if(y>=0){ans[q[i].id]=1;}}}else{if(dis[q[i].n%yin[0]]<=q[i].n){ans[q[i].id]=1;}}}for(reg i=1;i<=m;++i){if(ans[i]) puts("YES");else puts("NO");}return 0;
}}
signed main(){Miracle::main();return 0;
}/*Author: *Miracle*
*/

PS:

以后解一个多元一次不定方程,最小的数不太大的时候,同余最短路都可以尝试!

转载于:https://www.cnblogs.com/Miracevin/p/10955893.html

CF986F Oppa Funcan Style Remastered相关推荐

  1. 互联网大事件:《江南style》如何蹿红?(转)

    互联网社区化的威力啊(liupin) "oppa kangnan style--"这可能是某条胡同里玩耍的小孩在随便哼唱,可能是办公室里突然响起的手机铃声,也可能是大饭店里一场发布 ...

  2. 手势识别(1):基础理论

    像点击(clicks)是GUI平台的核心,轻点(taps)是触摸平台的核心那样,手势(gestures)是Kinect应用程序的核心.和图形用户界面中的数字交互不同,手势是现实生活中存在的动作.如果没 ...

  3. html style属性

    在html 中 style 用于为 HTML 文档定义样式信息. 使用方法: 自己目前总结出2中方法 1 在标签内部使用 2 <style> 当做一个标签使用 下面修改自己颜色为例 < ...

  4. android Style(样式)的解析

    先说下为啥要使用样式吧,举个例子来说吧 当要做这样的一个布局的时候 每个标签都要写的话,会感觉怎样 <LinearLayoutandroid:layout_width="match_p ...

  5. ListView style

    步骤一:在使用的ListView的activiey里使用android:theme="@style/Theme的名字" 步骤二:创建Themes.xml 在Themes.xml里定 ...

  6. html中有csstext方法吗,style对象的cssText方法有哪些使用方法

    这次给大家带来style对象的cssText方法有哪些使用方法,style对象的cssText方法使用的注意事项有哪些,下面就是实战案例,一起来看一下. cssText 本质是什么? cssText ...

  7. android values-v21 style 报错,Android 4.4 以上实现透明导航栏和状态栏 Translucent system bar...

    第一种方式 第一种方式,需要做下面三步设置 1.在values.values-v19.values-v21的style.xml都设置一个 Translucent System Bar 风格的Theme ...

  8. 几个比较冷门的prototype扩展方法:去掉html标签、去掉a标签、去掉style样式,以及判断是否为html代码的代码片段

    /*去掉html标签(真正意义上去掉所有html标签包括内嵌的css样式)*/ String.prototype.stripHTML = function (isRemoveNewLine) {var ...

  9. 吴恩达老师深度学习视频课笔记:神经风格迁移(neural style transfer)

            什么是神经风格迁移(neural style transfer):如下图,Content为原始拍摄的图像,Style为一种风格图像.如果用Style来重新创造Content照片,神经风 ...

  10. Artistic Style在windows下的使用(C/C++)

    ArtisticStyle是一个开源的源代码格式化工具.主页地址为:http://astyle.sourceforge.net/,它可以应用在C.C++.Objective-C.C#.Java等程序语 ...

最新文章

  1. windows组策略实用指南
  2. python对文件的读操作方法有哪些-Python文件常用操作方法
  3. 程序步骤_小程序平台搭建步骤是什么?
  4. 【Treap】[BZOJ 3224]Tyvj 1728 普通平衡树
  5. Splay(区间翻转) 模板
  6. hadoop3.2.1和java1.7版本不兼容解决方案(virtualBox下ubuntu环境linux系统)
  7. vc++ List Control控件获得所有选中行的序号
  8. 2022 USNews全美大学排行榜出炉!普林斯顿霸榜,哥大哈佛MIT并列第二
  9. java 如何循环执行一个对象_Java基础:如何定义好一个方法和进行方法重载
  10. python模块下载过程_常用的python模块及安装方法
  11. python3.4安装vc_Python3.4 用 pip 安装lxml时出现 “Unable to find vcvarsall.bat ”?
  12. php中ASCⅡ码的妙用
  13. mysql的驱动connect放在哪里_十年测试解析:ddt结合excel,csv,mysql实现自动化测试数据驱动...
  14. 威纶通触摸屏制作自定义欢迎界面的几种方法介绍
  15. 规则库捕获漏洞信息专用脚本
  16. 设计模式(一):工厂模式
  17. 程序员必须唱我哪些算法?
  18. Java招聘网站源码+页面
  19. attributeerror: module 'numpy.random' has no attribute 'randon'
  20. Nothing is impossble_七夕小子_新浪博客

热门文章

  1. oracle 行列转换 pivot unpivot (本文来自官网)
  2. 【干货】--基于Python的文本情感分类
  3. 剑指offer python版 构建乘积数组
  4. 【洛谷P4706】取石子
  5. Java多线程——Condition条件
  6. [jquery]高级篇--获取div子元素
  7. 小学题的python实现
  8. CentOS重启与关机
  9. 使用System.Drawing.Printing 画报表。
  10. 在Asp.net Mvc 3中使用swfupload