2021牛客暑期多校训练营5 G-Greater Integer, Better LCM(暴力+子集dp)

G-Greater Integer, Better LCM

看到校大佬的代码就瞬间会做了。

当时和队友想的是,首先转化题意即找两个数x≥a,y≥b[lcm(a,b)=c]x\ge a,y\ge b[\text{lcm}(a,b)=c]xa,yb[lcm(a,b)=c],首先不考虑x≥a,y≥bx\ge a,y\ge bxa,yb的限制,显然对于c=p1q1p2q2…pnqnc=p_1^{q_1}p_2^{q_2}\dots p_n^{q_n}c=p1q1p2q2pnqn,考虑其中一项piqip_i^{q_i}piqi,对于该项显然要么[pi0]a,[piqi]b[p_i^{0}]_a,[p_i^{q_i}]_b[pi0]a,[piqi]b要么[piqi]a,[pi0]b[p_i^{q_i}]_a,[p_i^{0}]_b[piqi]a,[pi0]b,这样只需要暴搜就行了,时间复杂度为O(2n)O(2^n)O(2n),但是加上了这个限制就不知道怎么搞了。

题目中有一个非常重要的地方就是∑qi≤18\sum q_i\leq 18qi18,这意味这我们不需要考虑是[pi0]a,[piqi]b[p_i^{0}]_a,[p_i^{q_i}]_b[pi0]a,[piqi]b还是[piqi]a,[pi0]b[p_i^{q_i}]_a,[p_i^{0}]_b[piqi]a,[pi0]b,只需要暴力枚举每一个qiq_iqi的次幂最后只针对x≥a,y≥bx\ge a,y\ge bxa,yb考虑即可。 详细看代码

最后一部分就是枚举超集dp转化一下。

#include<bits/stdc++.h>
using namespace std;
using ll=long long;
template <class T=int> T rd()
{T res=0;T fg=1;char ch=getchar();while(!isdigit(ch)) {if(ch=='-') fg=-1;ch=getchar();}while( isdigit(ch)) res=(res<<1)+(res<<3)+(ch^48),ch=getchar();return res*fg;
}
void print(__int128 v)
{if(v==0) return puts("0"),void();string ans;while(v){ans.push_back(v%10+'0');v/=10;}reverse(ans.begin(),ans.end());printf("%s\n",ans.c_str());
}
ll p[25],q[25];
int n;
__int128 a,b;
__int128 fa[(1<<18)+5],fb[(1<<18)+5];
void dfs(int u,int s,__int128 cur)
{if(cur>=a) fa[s]=min(fa[s],cur);if(cur>=b) fb[s]=min(fb[s],cur);if(u>=n) return;dfs(u+1,s,cur);for(int i=1;i<q[u];i++) {cur*=p[u];dfs(u+1,s,cur);}cur*=p[u];dfs(u+1,s^(1<<u),cur);
}
int main()
{n=rd();for(int i=0;i<n;i++) p[i]=rd<ll>(),q[i]=rd<ll>();a=rd<__int128>(),b=rd<__int128>();memset(fa,0x3f,sizeof fa);memset(fb,0x3f,sizeof fb);dfs(0,0,1);__int128 ans; memset(&ans,0x3f,sizeof ans);for(int i=(1<<n)-1;i>=0;i--)for(int j=0;j<n;j++)if((i>>j)&1){fa[i^(1<<j)]=min(fa[i^(1<<j)],fa[i]);fb[i^(1<<j)]=min(fb[i^(1<<j)],fb[i]);}for(int i=0;i<(1<<n);i++) ans=min(ans,fa[i]+fb[((1<<n)-1)^i]-a-b);print(ans);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/318736.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P2179-[NOI2012]骑行川藏【导数,二分】

正题 题目链接:https://www.luogu.com.cn/problem/P2179 题目大意 给出EEE和nnn个si,ki,uis_i,k_i,u_isi​,ki​,ui​求一个序列viv_ivi​满足 ∑i1nkisi(vi−ui)2≤E\sum_{i1}^nk_is_i(v_i-u_i)^2\leq Ei1∑n​ki​si​(vi​−ui​)2≤E 的情况下最小化 ∑i1nsivi\sum_{i1}^…

不止代码:乘法游戏 题解(区间dp)

题目描述 乘法游戏是在一行牌上进行的。每一张牌包括了一个正整数。在每一个移动中&#xff0c;玩家拿出一张牌&#xff0c;得分是用它的数字乘以它左边和右边的数&#xff0c;所以不允许拿第1张和最后1张牌。最后一次移动后&#xff0c;这里只剩下两张牌。 你的目标是使得分的…

边缘化搭建DotNet Core 2.1 自动化构建和部署环境(上)

写在前面写这篇文章的缘由是由于笔者的对新兴技术方向有所追求&#xff0c;但个人资产有限&#xff0c;只能容许购买一台阿里云低配1核2G服务器。服务器上搭建了 Centos7 & Docker & Jenkins & ASP.NET Core 2.0 自动化发布和部署 环境后牺牲了大部分性能。造成了一…

牛客题霸 [丑数] C++题解/答案

牛客题霸 [丑数] C题解/答案 题目描述 把只包含质因子2、3和5的数称作丑数&#xff08;Ugly Number&#xff09;。例如6、8都是丑数&#xff0c;但14不是&#xff0c;因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。 题解&#xff1a;…

codeforces1549 F1 - Gregor and the Odd Cows (Easy)(皮克公式)

皮克公式&#xff1a;求格点多边形面积 AB2I−1A\frac B 2I-1 A2B​I−1 其中 A&#xff1a;area 面积 B&#xff1a;boundary 边界上整点的个数 I&#xff1a;interior 多边形内部点的个数 对于两个整数点(x1,y1),(x2,y2)(x_1,y_1),(x_2,y_2)(x1​,y1​),(x2​,y2​)来说&…

P3288-[SCOI2014]方伯伯运椰子【0/1分数规划,负环】

正题 题目链接:https://www.luogu.com.cn/problem/P3288 题目大意 给出nnn个点mmm条边的一张图&#xff0c;没条边iii流量为cic_ici​&#xff0c;费用是did_idi​&#xff0c;然后缩小一个流量费用是aia_iai​&#xff0c;增加一个流量费用是bib_ibi​。 要求改动图之后最大…

不止代码:ybtoj-消除木块(区间DP)

题目描述 n个木块排成一列&#xff0c;每个木块都有一个颜色。 每次&#xff0c;你都可以点击一个木块&#xff0c;这样被点击的木块以及和它相邻并且同色的木块就会消除。 如果一次性消除了k个木块&#xff0c;那么就会得到k*k分。 给定你一个游戏初始状态&#xff0c;请你…

.NET Core实战项目之CMS 第六章 入门篇-Vue的快速入门及其使用

写在前面上面文章我给大家介绍了Dapper这个ORM框架的简单使用&#xff0c;大伙会用了嘛&#xff01;本来今天这篇文章是要讲Vue的快速入门的&#xff0c;原因是想在后面的文章中使用Vue进行这个CMS系统的后台管理界面的实现。但是奈何Vue实现的SPA有一定的门槛&#xff0c;不太…

牛客练习赛10 F-序列查询(莫队+链表)

F-序列查询 v5zsq题解 假设数字xxx在区间[l,r]种出现y次&#xff0c;那么包含x的子区间个数为2r−l1−y⋅(2y−1)2^{r-l1-y}(2^y-1)2r−l1−y⋅(2y−1)&#xff0c;因此对询问贡献是x⋅2r−l1−y⋅(2y−1)x[2r−l1−2r−l1−y]x2^{r-l1-y}(2^y-1)x[2^{r-l1}-2^{r-l1-y}]x⋅2r…

牛客题霸 [有关阶乘的两个问题1] C++题解/答案

牛客题霸 [有关阶乘的两个问题1] C题解/答案 题目描述 给定一个非负整数N&#xff0c;返回N!结果的末尾为0的数量 题解&#xff1a; 这个题有技巧 102*5,也就是说有一对2和5就会贡献一个0&#xff0c;但是2的数量远远大于5&#xff0c;所以只用统计五即可 代码&#xff1a…

不止代码:ybtoj-棋盘分割(二维区间dp)

题目描述 将一个8*8的棋盘进行如下分割&#xff1a;将原棋盘割下一块矩形棋盘并使剩下部分也是矩形&#xff0c;再将剩下的部分继续如此分割&#xff0c;这样割了n-1次后&#xff0c;连同最后剩下的矩形棋盘共有n块矩形棋盘。 (每次切割都只能沿着棋盘格子的边进行) 原棋盘上…

P7717-「EZEC-10」序列【Trie】

正题 题目链接:https://www.luogu.com.cn/problem/P7717 题目大意 求有多少个长度为nnn的序列aaa满足&#xff0c;都在[0,k][0,k][0,k]的范围内且满足mmm个限制刑如&#xff1a;axxorayza_x\ xor\ a_yzax​ xor ay​z 0≤n,m≤5105,0≤k<2300\leq n,m\leq 5\times 10^5,0\…

ASP.NET Core MVC 授权的扩展:自定义 Authorize 和 IApplicationModelProvide

一、概述ASP.NET Core MVC 提供了基于角色( Role )、声明( Chaim ) 和策略 ( Policy ) 等的授权方式。在实际应用中&#xff0c;可能采用部门&#xff08; Department , 本文采用用户组 Group &#xff09;、职位 ( 可继续沿用 Role )、权限( Permission )的方式进行授权。要达…

牛客题霸 [分糖果问题] C++题解/答案

牛客题霸 [分糖果问题] C题解/答案 题目描述 一群孩子做游戏&#xff0c;现在请你根据游戏得分来发糖果&#xff0c;要求如下&#xff1a; 每个孩子不管得分多少&#xff0c;起码分到一个糖果。任意两个相邻的孩子之间&#xff0c;得分较多的孩子必须拿多一些糖果。(若相同则…

不止代码 洛谷P1006 传纸条(dp)

传送门 走两次 dp[x1][y1][x2][y2]表示两条路分别到两个点的坐标后的最大值 为了防止走重&#xff0c;dp[x1][y1][x1][y1]赋值为无穷小 时间复杂度O&#xff08;n^4&#xff09; 代码 #include<cstdio> #include<cstring> #include<algorithm> #include<…

通俗易懂,C#如何安全、高效地玩转任何种类的内存之Span

前言作为.net程序员&#xff0c;使用过指针&#xff0c;写过不安全代码吗&#xff1f;为什么要使用指针&#xff0c;什么时候需要使用它&#xff1f;如果能很好地回答这两个问题&#xff0c;那么就能很好地理解今天了主题了。C#构建了一个托管世界&#xff0c;在这个世界里&…

P5180-[模板]支配树

正题 题目链接:https://www.luogu.com.cn/problem/P5180 题目大意 给出nnn个点的一张有向图&#xff0c;求每个点支配的点数量。 1≤n≤2105,1≤m≤31051\leq n\leq 2\times 10^5,1\leq m\leq 3\times 10^51≤n≤2105,1≤m≤3105 解题思路 首先定义半支配点semixsemi_xsemix…

P4062 [Code+#1]Yazid 的新生舞会(区间绝对众数+分治/树状数组维护高维前缀和)

P4062 [Code#1]Yazid 的新生舞会 杭电多校懂得都懂 Code1 分治 比较喜欢分治的做法&#xff0c;非常好写。skylee大佬题解 首先对于任何一个区间来说&#xff0c;由于两个端点不确定性非常难以一次性统计多组区间&#xff0c;因为它们没有相似之处。 考虑分治&#xff0c;…

牛客题霸 [判断回文] C++题解/答案

牛客题霸 [判断回文] C题解/答案 题目描述 给定一个字符串&#xff0c;请编写一个函数判断该字符串是否回文。如果回文请返回true&#xff0c;否则返回false。 题解&#xff1a; 左右两端同时向中间缩 代码&#xff1a; class Solution { public:/*** 代码中的类名、方法…

AC自动机:例题与机制详解

介绍 AC自动机是kmp算法和trie树的结合 大体就是做这样的题用&#xff1a; 可以发现&#xff0c;这题和trie树的区别是把多个单词往一篇文章匹配&#xff0c;而trie恰好相反 匹配的时候其实就是判断子串&#xff0c;所以又用到了kmp 定义失配指针nxt[i]&#xff1a;表示root到…