题目链接

题意

给定 1e9 以内的正整数 n,d,问 n 能否由至少两种不同的方式由漂亮数相乘得到;

漂亮数的定义为:能被 d 整除,但不能被 d * d 整除;

思路

n 有一系列数相乘得到,则每一个数都是 n 的因子,可以把 n 的因子枚举出,然后做完全背包,即可的得到 n 的方案数;

1e9 以内的数的因子数最多 1300 多个,完全可以枚举;在背包之前需要对因子离散化,但对 1e9 以内的数做离散化,我们开不下 1e9 的数组,如果用 map 的话,会多一个 log 的时间复杂度;从 dls 那学了一种方法:我们以 1e5 为界,开两个数组分别存 1e5 之前以及 1e5 之后的元素的离散化值,看代码比较容易懂;

//mx为1e5,id存1e5之前数的离散化值,gid存1e5之后数的离散化值
for(int i = 1 ;i <= cnt ;i++){if(factor[i] <= mx) id[factor[i]] = i;else gid[n / factor[i]] = i;
}

之后就是完全背包的操作了;

代码

#include <bits/stdc++.h>using namespace std;
typedef long long ll;int f[100010];
int factor[1400],cnt;
int id[100010],gid[100010];
int mx=100010;int main()
{ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);int _;cin>>_;while(_--){memset(f,0,sizeof(f));cnt=0;ll n,d;cin>>n>>d;for(int i=1;i*i<=n;i++){if(n%i==0){factor[++cnt]=i;if(i*i!=n) factor[++cnt]=n/i;}}sort(factor+1,factor+cnt+1);for(int i=1;i<=cnt;i++){if(factor[i]<=mx) id[factor[i]]=i;else gid[n/factor[i]]=i;}f[1]=1;for(int i=1;i<=cnt;i++){if(factor[i]%d==0&&(factor[i]/d)%d!=0){for(int j=1;j<=cnt;j++){if((n/factor[i])%factor[j]) continue;int x=factor[i]*factor[j];int y;if(x<=mx) y=id[x];else y=gid[n/x];f[y]=f[y]+f[j];}}}if(f[cnt]>=2) cout<<"YES\n";else cout<<"NO\n";}return 0;
}

CF1647D Madoka and the Best School in Russia(数论,dp,离散化技巧)相关推荐

  1. [因子背包] CF1647D Madoka and the Best School in Russia

    由这次的D题从杜老师那学会的比较新奇的背包,我暂且将其命名为因子背包 题意: 一个数xxx被称为好数,当且仅当他被ddd整除而不被d2d^2d2整除. 给定一个数nnn,问是否有超过两种组成方式,让它 ...

  2. 【CodeForces - 1647D】Madoka and the Best School in Russia(分类讨论,因数分解)

    题目链接 题意: 判断一个数nnn,能否有至少两种方法将其表示为 n=a1a2...akn=a_1a_2...a_kn=a1​a2​...ak​(k>=1k>=1k>=1),需要满足 ...

  3. Codeforces Round #777 (Div. 2)

    7月19日 A Madoka and Math Dad B Madoka and the Elegant Gift C Madoka and Childish Pranks A Madoka and ...

  4. Codeforces Round #777 (Div. 2) 简训

    Codeforces Round #777 (Div. 2) 简训 导语 涉及的知识点 题目 A Madoka and Math Dad B Madoka and the Elegant Gift C ...

  5. Codeforces Round #777 (Div. 2) (A-D题解)

    源代码:ACM/OpenjudgeNow/Codeforces at master · abmcar/ACM (github.com) 更好的阅读体验: 折跃坐标 碎碎念:不亏是俄罗斯场+二次元出题人 ...

  6. Codeforces Round #777 (Div. 2) 题解

    Codeforces #777 题解 这次带上了大佬前来验题xs 公开大佬珍贵的代码资源供参考 TOC A.Madoka and Math Dad B.Madoka and the Elegant G ...

  7. 【CF #777 div2】A—D

    A. Madoka and Math Dad 题解:拆分成2.1.找到能生成的最大值即可. #include<bits/stdc++.h> using namespace std; con ...

  8. CF1717D Madoka and The Corruption Scheme

    CF1717D Madoka and The Corruption Scheme Summary: 二项式.二进制路径.(逆元) Day 20220907 距离 CSPS 43Days 距离 NOIP ...

  9. Madoka and Childish Pranks(贪心)

    Madoka and Childish Pranks 题意 : 这题的意思有点难懂,大概题意是,原本有n ∗ m 的网格,然后每次操作只能按棋盘图案操作,就是只能画一个类似棋盘的图案,比如样例1,第一 ...

最新文章

  1. kalilinux安装VMware Tools(水文)
  2. UCLA李婧翌:女性最不需要做的就是「怀疑自己」| 妇女节特辑
  3. 驰骋工作流引擎设计系列10时效考核规则设计
  4. context存放内容_Go语言爱好者周刊:第 58 期—关于 context
  5. 第三方快递接口API调用
  6. 4 [面向对象]-三大特性:多态
  7. 正向代理 smtp imap_Nginx代理模式及区别
  8. 树莓派串口通信编码_树莓派和STM32通过USB和串口通信记录
  9. VS2019配置opencv教程【推荐】
  10. ArcGIS Pro地图制图之符号化和地图标注
  11. 360Hbase二级索引
  12. Comet:基于 HTTP 长连接的“服务器推”技术
  13. Android 字体引入
  14. order by a desc,b desc与order by a,b desc不同
  15. 科技岗位日趋增长,能成为女性职业选择的新可能吗?
  16. jquery ul li 操作
  17. MySQL练习题 答案和解析
  18. 安装hisuite后,依然无法连接华为手机,驱动无法正确安装
  19. 学习Android怎么在未来站稳脚跟
  20. 基于php校园医院门诊管理系统获取(php毕业设计)

热门文章

  1. C++中string类函数常用函数大全
  2. python 随机森林分类 DecisionTreeClassifier 随机搜索优化参数 GridSearchCV
  3. 由DatePicket和TimePicker扩展延伸其他控件
  4. 人工智能 识别医疗票据、医疗结算清单 OCR识别技术
  5. canvas之刮刮乐
  6. 容联云聚客SCRM如何破SCRM保险应用困局
  7. 鸿蒙渊主线任务,《天下3》更新公告(版本2.0.848)
  8. 基于Python打印文字到桌面壁纸上的提醒学习小程序
  9. CoreML遇到的问题和原因
  10. 22届春招实习试水之路汇总(前端+后端)