题目链接

LOJ:https://loj.ac/problem/6432

Solution

假设我们当前要算\(x\)的答案,分两种情况讨论:

  • \(x\)没被翻倍,那么\([a_x/2,a_x]\)这个区间的数不能动,其他的随便选,组合数就好了。
  • \(x\)翻倍了,那么\([a_x,a_x*2]\)这个区间一定要翻倍,其他的随便选。

实现的时候排序然后指针扫一下就好了。

Code

#include<bits/stdc++.h>
using namespace std; void read(int &x) {
x=0;int f=1;char ch=getchar();
for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-f;
for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';x*=f;
} void print(int x) {
if(x<0) putchar('-'),x=-x;
if(!x) return ;print(x/10),putchar(x%10+48);
}
void write(int x) {if(!x) putchar('0');else print(x);putchar('\n');} #define lf double
#define ll long long #define pii pair<int,int >
#define vec vector<int > #define pb push_back
#define mp make_pair
#define fr first
#define sc second #define FOR(i,l,r) for(int i=l,i##_r=r;i<=i##_r;i++) const int maxn = 2e5+10;
const int inf = 1e9;
const lf eps = 1e-8;
const int mod = 998244353; int n,k,ans[maxn],fac[maxn],ifac[maxn],inv[maxn],t[maxn]; struct data{int x,id,ans;}a[maxn]; int add(int x,int y) {return x+y>=mod?x+y-mod:x+y;}
int del(int x,int y) {return x-y<0?x-y+mod:x-y;}
int mul(int x,int y) {return 1ll*x*y-1ll*x*y/mod*mod;} void prepare() {
inv[0]=inv[1]=ifac[0]=fac[0]=1;
FOR(i,1,n) fac[i]=mul(fac[i-1],i);
FOR(i,2,n) inv[i]=mul(mod-mod/i,inv[mod%i]);
FOR(i,1,n) ifac[i]=mul(ifac[i-1],inv[i]);
} int c(int x,int y) {
if(x<y||x<0) return 0;
return mul(mul(fac[x],ifac[y]),ifac[x-y]);
} int cmp1(data x,data y) {return x.x<y.x;}
int cmp2(data x,data y) {return x.id<y.id;} int main() {
read(n),read(k);FOR(i,1,n) read(a[i].x),a[i].id=i;
prepare();sort(a+1,a+n+1,cmp1);a[0].x=-1;
for(int i=1;i<=n;i++) if(a[i].x==a[i-1].x) t[i]=t[i-1];else t[i]=n-i+1;
int p=0;a[0].x=0;
for(int i=1;i<=n;i++) {
while((a[p+1].x<<1)<a[i].x) p++;
a[i].ans=add(a[i].ans,c(p+t[i]-1,k));
}p=1;
for(int i=1;i<=n;i++) {
while(a[p+1].x<(a[i].x<<1)&&p+1<=n) p++;
a[i].ans=add(a[i].ans,c(n-(p-i+1),k-(p-i+1)));
}for(int i=1;i<=n;i++) if(a[i].x==a[i-1].x) a[i].ans=a[i-1].ans;
sort(a+1,a+n+1,cmp2);
for(int i=1;i<=n;i++) write(a[i].x==0?c(n,k):a[i].ans);
return 0;
}

最新文章

  1. mysql 常用语句
  2. Server Tomcat v7.0 Server at localhost failed to start.临时解决办法
  3. POJ 2004 Mix and Build (预处理+dfs)
  4. 使用Spring Session做分布式会话管理
  5. 【Todo】【转载】ES6的学习记录
  6. ASP.NET 中OAUTH 2.0 及OPENID CONNECT的介绍
  7. C#-设置窗体在显示器居中显示
  8. JVM之GC算法
  9. [ Java学习基础 ] Java异常处理
  10. const与#define相比有什么不同?
  11. HBase 笔记1
  12. nginx 文档链接
  13. 讲一讲MySQL如何防止“老鼠屎”类型的SQL语句
  14. Lambda引言
  15. SQLServer的TDE加密
  16. Android开发(二十)——Fragment中的touch事件
  17. NoSQL集锦
  18. Origin8.0使用心得(不定时更新)
  19. Python字符编码详解,str,bytes
  20. ListView里面adapter的不同分类的item

热门文章

  1. matrix67中适合程序员的例子
  2. web安全总结
  3. gdb 调试core文件报错: in free () from /lib64/libc.so.6 找不到原因啊
  4. pip崩了, 解决 ModuleNotFoundError: No module named &#39;pip&#39;.
  5. 无人机一体化3DGIS服务平台
  6. 微信小程序之页面传参
  7. Redis配置讲解及实战
  8. 转:sql 经典50题--可能是你见过的最全解析
  9. asp.net core 获取appsettings.json里的配置
  10. Linux虚拟内存的作用