CF D. Ehab and the Expected XOR Problem 贪心+位运算

本文深入探讨了C++中使用位运算进行状态压缩动态规划的技巧,通过一个具体的示例代码,详细解释了如何利用位运算提高算法效率,尤其是在解决组合优化问题时的应用。文章涵盖了位运算的基本概念、状态压缩DP的思想、代码实现细节以及如何优化内存使用。

code: 

#include <bits/stdc++.h>          
#define N 1000000    
#define setIO(s) freopen(s".in","r",stdin) 
using namespace std; 
int vis[N],b[N];           
void solve() 
{
    int n,m,i,j,cur=1,cnt=0;   
    memset(vis,0,sizeof(vis));   
    scanf("%d%d",&n,&m);   
    vis[m]=1;                  
    for(i=1;i<=(1<<n);++i) 
    {      
        while(vis[cur]) ++cur;        
        if((cur^b[cnt-1]) >= (1<<n)) break;                                                   
        b[++cnt]=cur;          
        vis[cur^m]=1;     
        ++cur;                                            
    }
    printf("%d\n",cnt);     
    for(i=0;i<cnt;++i) printf("%d ",b[i]^b[i+1]);          
}
int main() 
{  
    int i,j,T; 
    // setIO("input");         
    solve();       
    return 0; 
}

  

This time Baby Ehab will only cut and not stick. He starts with a piece of paper with an array a a of length n n written on it, and then he does the following: he picks a range ( l , r ) (l,r) and cuts the subsegment a l , a l + 1 , … , a r a l ​ ,a l+1 ​ ,…,a r ​ out, removing the rest of the array. he then cuts this range into multiple subranges. to add a number theory spice to it, he requires that the elements of every subrange must have their product equal to their least common multiple (LCM). Formally, he partitions the elements of a l , a l + 1 , … , a r a l ​ ,a l+1 ​ ,…,a r ​ into contiguous subarrays such that the product of every subarray is equal to its LCM. Now, for q q independent ranges ( l , r ) (l,r), tell Baby Ehab the minimum number of subarrays he needs. Input The first line contains 2 2 integers n n and q q ( 1 ≤ n , q ≤ 10 5 1≤n,q≤10 5 ) — the length of the array a a and the number of queries. The next line contains n n integers a 1 a 1 ​ , a 2 a 2 ​ , … …, a n a n ​ ( 1 ≤ a i ≤ 10 5 1≤a i ​ ≤10 5 ) — the elements of the array a a. Each of the next q q lines contains 2 2 integers l l and r r ( 1 ≤ l ≤ r ≤ n 1≤l≤r≤n) — the endpoints of this query's interval. Output For each query, print its answer on a new line. Examples Inputcopy Outputcopy 6 3 2 3 10 7 5 14 1 6 2 4 3 5 3 1 2 Note The first query asks about the whole array. You can partition it into [ 2 ] [2], [ 3 , 10 , 7 ] [3,10,7], and [ 5 , 14 ] [5,14]. The first subrange has product and LCM equal to 2 2. The second has product and LCM equal to 210 210. And the third has product and LCM equal to 70 70. Another possible partitioning is [ 2 , 3 ] [2,3], [ 10 , 7 ] [10,7], and [ 5 , 14 ] [5,14]. The second query asks about the range ( 2 , 4 ) (2,4). Its product is equal to its LCM, so you don't need to partition it further. The last query asks about the range ( 3 , 5 ) (3,5). You can partition it into [ 10 , 7 ] [10,7] and [ 5 ] [5]. 解法:条件就是两两互质,预处理质因⼦集,找出每个数下⼀个不互质的位置。 i 进⼀步的,可以找出每个 作为左端点,可⾏的右端点最⼤是多⼤(区间 min)。 2j 因此每次划分极⻓就可以了,令 f(i, j) 然后枚举答案的⼆进制下每⼀位即可。 。 求C++代码.
最新发布
06-10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值