[ARC086]F
来源:互联网 发布:js 运动轨迹 编辑:程序博客网 时间:2024/06/04 18:23
题面
可以证明,在最后一次
我们定义
1.
2.
3.
可以发现,经过前两次操作,一些数x变成了
设这些余数为
那我们会得到
那么我们把差分序列相同的分成一类,那么一类中首项相同也就序列相同,每个序列的首项有一个取值范围
总复杂度
代码:
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#define ll long longusing namespace std;const int mod=1000000007;int n,top,num;ll K,a[210],c[210],d[210];pair<ll,ll> qj[12010];struct node{ ll t[210],a1; int k;}s[12010];bool operator <(const node &a,const node &b){ for(int i=1;i<n;i++) if(a.t[i]<b.t[i]) return 1; else if(a.t[i]>b.t[i]) return 0; return 0; }bool check(node &a,node &b){ for(int i=1;i<n;i++) if(a.t[i]!=b.t[i]) return 0; return 1; }int maxpop(ll x,ll y){ if(x==-1) return 0; int re=0; for(int i=60;i>=0;i--) if(((x>>i)&1)==((y>>i)&1)) re+=((x>>i)&1); else {re++;break;} return re; }ll dp(){ sort(qj+1,qj+num+1); ll re=0,l=0,r=-1; for(int i=1;i<=num;i++) { if(qj[i].first>r) {re+=(r-l+1);l=qj[i].first;} r=qj[i].second; } re+=(r-l+1); return re; }int main(){ scanf("%d%lld",&n,&K); for(int i=1;i<=n;i++) scanf("%lld",&a[i]); sort(a+1,a+n+1); for(int i=0;i<=60;i++) { for(int j=1;j<=n;j++) c[j]=(a[j]&((1ll<<i)-1)); sort(c+1,c+n+1); c[0]=-1; int sz=unique(c+1,c+n+1)-c-1; for(int j=1;j<=sz;j++) if(a[1]>=c[j]) { int P=maxpop(c[j-1],c[j]); for(int l=1;l<=n;l++) d[l]=((a[l]-c[j])>>i); s[++top].a1=d[1];s[top].k=i+P; for(int l=1;l<n;l++) s[top].t[l]=d[l+1]-d[l]; } } sort(s+1,s+top+1); num=0; ll ans=0; for(int i=1;i<=top;i++) { if(i!=1&&!check(s[i],s[i-1])) ans=(ans+dp())%mod,num=0; if(s[i].k<=K)qj[++num]=make_pair(max(s[i].a1-K+s[i].k,0ll),s[i].a1); } ans=(ans+dp())%mod; printf("%lld",ans); return 0;}
阅读全文
1 0
- [ARC086]F
- [ARC086]D
- [ARC086]E
- f
- f
- f
- f
- f
- F#
- f
- F
- f
- f
- f
- f
- f
- f
- F
- 【每日安全资讯】南方周末被发现植入了挖矿脚本
- 零基础学python-python简介,安装
- 排除问题的思想
- Glitch:可以让你立即写出有趣的小型网站
- 有人试图挽救 Ubuntu Unity ,将其做为官方分支
- [ARC086]F
- 关于 Found a swap file by the name xx
- 生成坐标系(网格)
- java 数字三角形
- (十四)异常
- 马攀博客
- Windows PowerShell in Action, 3rd Edition.pdf 2017 英文原版 免费下载
- 项目1-企业门户网-1-首页
- collections.defaultdict() 与 dict的使用和区别