首页 > 其他分享 >8.14

8.14

时间:2022-08-17 14:37:16浏览次数:60  
标签:int leq 循环 8.14 define 节里 mod

CF1463F

题意:

规定一组正整数 \(S\)。当且仅当满足以下条件时该组正整数成立:

  • \(S \subseteq \{1,2,...,n\}\)

  • 如果 \(a \in s\) 并且 \(b \in s\),那么 \(|a - b| \not ={x}\) 并且 \(|a - b| \not ={y}\)

对于给定的数值 \(n,x,y\),你需要找到成立数组的最大长度

\(1\leq n\leq 10^9,1\leq x,y\leq 22\)

题解:

把数组转化为\(1\sim n\)的\(01\)序列,问题就是不能有两个之间的距离是\(x\)或\(y\),有最多有多少个\(1\)。

然后就是一种\(O(n*2^{max(x,y)})\)的状压做法

其实看\(n\)这么大也知道肯定要把这个\(n\)干掉。

结论就是这个序列以\(x+y\)为周期循环。

循环节之间是互不影响的。

为什么呢?假如不再一个循环节里的两个位置\(a,b\),满足\(b-a=x\),那么\(a-(b-x-y)=y\),而且\(b-x-y\)和\(a\)在同一个循环节里。

这就说明如果相邻循环节之间的位置冲突,那这个循环节内部自己也冲突。

只要循环节里不冲突就行。

这样就可以\(O((x+y)*2^{max(x,y)})\)

根据大佬的说法,可以做到\(O(x+y)\)

一段区间里不合法的位置\(a,b\)满足\(|a-b|=±x(mod\ x+y)\)

对于任意位置\(0\leq p\leq x+y\),向\(p+x\ mod\ (x+y)\)连边,那么图中会分出几个环。答案就是这几个环上的最大独立集。

#include<bits/stdc++.h>
using namespace std;
namespace red{
#define int long long
#define double long double
#define ls(p) (p<<1)
#define rs(p) (p<<1|1)
#define lowbit(i) ((i)&(-i))
#define mid ((l+r)>>1)
#define eps (1e-15)
    const int N=1e6+10,mod=1e9+7,inv2=5e8+4,inf=2e15;
    void __init(int n=2000) {}
    
    inline void main()
    {
        int n,x,y;cin>>n>>x>>y;
        int m=x+y;
        int S=(1<<22);
        vector dp(2,vector<int>(S,-inf));
        dp[0][0]=0;
        int ans=0,opt=0;
        for(int i=1;i<=m;++i)
        {
            opt^=1;
            for(int k=0;k<S;++k) dp[opt][k]=-inf;
            for(int k=0;k<S;++k)
            {
                dp[opt][(S-1)&(k<<1)]=max(dp[opt][(S-1)&(k<<1)],dp[opt^1][k]);
                if((k>>(x-1))&1) continue;
                if((k>>(y-1))&1) continue;
                dp[opt][((S-1)&(k<<1))|1]=max(dp[opt][((S-1)&(k<<1))|1],dp[opt^1][k]+n/m+(n%m>=i));
            }  
            for(int k=0;k<S;++k) ans=max(ans,dp[opt][k]);
        }
        cout<<ans<<'\n';
    }
}
signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    red::__init();
    int qwq=1; //cin>>qwq;
    while(qwq--) red::main();
    return 0;
}
/*

*/

标签:int,leq,循环,8.14,define,节里,mod
From: https://www.cnblogs.com/knife-rose/p/16595066.html

相关文章

  • 考研记录Week12【8.8~8.14】
    一、本周总结:使用时间:总计42h10min,高数:16h2min,线代:6h22min,英语单词:5h15min,英语真题3h,操作系统:9h3min,政治:2h31min.完成任务:数学:1.高数:辅导讲义结束√2.线代:880线代部分第7,......
  • 上周热点回顾(8.8-8.14)
    热点随笔:· 如何在BI中增加“路线地图”并进行数据分析? (葡萄城技术团队)· 程序员的悲哀 (林子er)· 学长告诉我,大厂MySQL都是通过SSH连接的 (咔咔-)· 【Maui正......
  • 2022.8.14-八月第二周-周日-兰亭序
    不知道能不能用,这周试一下 作词:方文山作曲:周杰伦编曲:钟兴民兰亭临帖行书如行云流水月下门推心细如你脚步碎忙不迭千年碑易拓却难拓你的美真迹绝真心能给......
  • 2022.8.14 多校周报
    总结牛客第七场C开局签到题,一道构造,rty直接写了过了。F思维题,类似括号匹配,但当时没想到用栈实现,写的很麻烦WA了几次,最后rty用了个伪链表,还是做出来了。G被非常长的......
  • 2022.08.14 这两天亏麻了,做空最强的,做多最弱的,左右挨打!记住顺势而为!
    【注】:记住这次的教训吧,做交易一定要保持敬畏之心!看大做小!前天SLP赚了90刀,账户也回到4000市值,昨天看到cel一直涨,早上又大涨22个点,所以就有了做空的想法,当时下了17刀,后......
  • 8.14闲话
    100多块钱的早餐果然不错,只是我吃自助餐真的太不划算了。上午模拟赛,T1不会,T2不会,T3是题答,有人半个小时就做出来了50多分,我一个上午只做出来了23分,成功垫底。左边dX神仙,前......
  • 周回顾并发编程与数据库08.14:UDP协议、操作系统发展史、相关名词、进程、线程、验证py
    目录UDP协议操作系统发展史相关名词进程线程锁信号量event事件池协程数据库MySQLSQL与NoSQL内容UDP协议Internet协议集支持一个无连接的传输协议,该协议......
  • 闲话 22.8.14
    闲话意识流一把水是静止在空中的。空中的水有着别样的魔力,总能在那里流淌到终结。是的,总是终结。水并无法自己留在空中。它需要一把钥匙。钥匙总在需要的时候到来,......
  • 8.14 洛谷月赛
    感觉没有tg难\(\rmLink\)目录\(T1\)\(T2\)\(T3\)(主打\(div2\))\(T1\)这个\(T1\)是个神仙题,我甚至为它写了一个\(45pts\)的暴力分然后过去切了\(T2\)再回来看才......
  • 2022.8.14 NPM包管理器与Babel
    04、NPM包管理器4.1、简介官方网站:https://www.npmjs.com/ NPM全称NodePackageManager,是Node.js包管理工具,是全球最大的模块生态系统,里面所有的模块都是开源免费的;也......