[hdu5632][BC#73 1002]Rikka with Array
点开BC发现今晚没比赛。。然后似乎上一场有数位DP?...(幸好我没去
一开始被BCDcode那题的思路带歪了。。后来发现得把n转成二进制才能搞TAT
题目大概是要求一种类似逆序对的鬼东西:
有一个长度为 n 的数组 A(下标为 1 到 n),A_i 为 i 的二进制表示中的1的个数,例如 A[1]=1, A[3]=2, A[10]=2。
现在勇太想知道数组 A 中满足 A[ i ]>A[ j ] 的数对 ( i , j )(1 ≤ i < j ≤ n) 的个数。
f[i][j]表示二进制下,i位的数有j个1的方案数(其实也就是组合数了
再预处理出g[i]表示二进制下,i位的数中,满足题意的数对的个数。
统计的时候用pre[i]表示 之前的数中,1的个数为i的数的个数。
其实有点像逆序对的那题(hdu5225)
统计的时候,一开始脑残写了发树状数组,然后复杂度比正解多一个log神奇的200+ms过了(中途还在纠结树状数组怎么写233)
吐槽了一下数据强度,然后发现自己傻逼了...弄个变量记录就行了TAT。。所以总的时间复杂度是O(10 * log²n)(logn是<1000的)
然后就46ms跑过去啦。。并列#1。。。(因为是新题...目前这题才30+人过... 实在没法再卡常了
#include<cstdio>
#include<iostream>
#include<cstring>
#define ll long long
#define MOD(x) x-=x>=modd?modd:0
#define modd 998244353
using namespace std; int f[][],g[],nowsm[],pre[];
int two[];
int i,j,k,n,m,len,len1;
char s1[],s[]; inline void turn(){
len=;
register int i,l=;
while(l<=len1&&s1[l]){
s[++len]=s1[len1]&;
for(i=l;i<=len1;i++)
s1[i+]+=(s1[i]&)?:,s1[i]>>=;
if(!s1[l])l++;
}
} inline int get(){
register int i,pr=,sm;int ans=g[len-];
memset(pre,,sizeof(pre));
memcpy(pre,f[len-],len<<);
pr=;
for(i=len-;i;pr+=s[i--])
if(s[i]){
for(ans+=g[i-],MOD(ans),sm=,j=len;j>=pr;j--)
sm+=pre[j],MOD(sm);
for(j=,k=pr;j<=i;j++,k++)
sm-=pre[k],sm+=sm<?modd:,
ans=(ans+(ll)f[i-][j]*sm)%modd,
pre[k]+=f[i-][j],MOD(pre[k]);
}
for(i=len;i>pr;i--)ans+=pre[i],MOD(ans);
return ans;
}
int main(){
register int i,j;
for(i=;i<=;i++)f[i][]=;f[][]=;
for(i=,g[]=;i<=;i++){
g[i]=g[i-]<<,MOD(g[i]);
ll sm=;
for(j=;j<=i;j++)
sm+=f[i-][j],f[i][j]=f[i-][j]+f[i-][j-],MOD(f[i][j]);
for(j=;j<i;j++)
sm-=f[i-][j+],
g[i]=(g[i]+sm%modd*f[i-][j])%modd;
} int T;scanf("%d",&T);
while(T--){
scanf("%s",s1);len1=strlen(s1);for(i=len1;i;i--)s1[i]=s1[i-]-;
turn(),
printf("%d\n",get());
}
return ;
}
[hdu5632][BC#73 1002]Rikka with Array的更多相关文章
- 【hdu 5632】Rikka with Array
Description As we know, Rikka is poor at math. Yuta is worrying about this situation, so he gives Ri ...
- CA Loves GCD (BC#78 1002) (hdu 5656)
CA Loves GCD Accepts: 135 Submissions: 586 Time Limit: 6000/3000 MS (Java/Others) Memory Limit: ...
- BC#32 1002 hash
代码引用kuangbin大神的,膜拜 第一次见到hashmap和外挂,看来还有很多东西要学 维护前缀和sum[i]=a[0]-a[1]+a[2]-a[3]+…+(-1)^i*a[i] 枚举结尾i,然后 ...
- 【HDOJ】5632 Rikka with Array
1. 题目描述$A[i]$表示二级制表示的$i$的数字之和.求$1 \le i < j \le n$并且$A[i]>A[j]$的$(i,j)$的总对数. 2. 基本思路$n \le 10^ ...
- 【HDU】4908 (杭电 BC #3 1002题)BestCoder Sequence ——哈希
BestCoder Sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- 73. Set Matrix Zeroes (Array)
Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. Follow ...
- HDU 5632 Rikka with Array [想法题]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5632 ------------------------------------------------ ...
- BestCoder Round #73 (div.2)
1001 Rikka with Chess ans = n / 2 + m / 2 1002 Rikka with Graph 题意:n + 1条边,问减去至少一条使剩下的图连通的方案数. 分析:原来 ...
- hdu5634 BestCoder Round #73 (div.1)
Rikka with Phi Accepts: 5 Submissions: 66 Time Limit: 16000/8000 MS (Java/Others) Memory Limit: ...
随机推荐
- 监听键盘弹起View上调
可以用三方库IQKeyboardManager 用这个第三方 http://www.jianshu.com/p/f8157895 #pragma mark - keyboard events - // ...
- Handler的解析和使用
1.handler为android中多线程间通信的一种机制, @1android中只允许在UI线程(主线程)操作或改变UI,其他线程不能操作UI. @2其他线程有刷新UI的需要,所以得告诉UI线程,这 ...
- Linux目录结构介绍-http://yangrong.blog.51cto.com/6945369/1288072
1.树状目录结构图 2./目录 目录 描述 / 第一层次结构的根.整个文件系统层次结构的根目录. /bin/ 需要在单用户模式可用的必要命令(可执行文件):面向所有用户,例如:cat.ls.cp,和/ ...
- 摄像头脸部识别 (1)opencv 抓取视频数据并保存
摄像头脸部识别 (1)opencv 抓取视频数据并保存 基于python 和 opencv 3.4.0 (兼容 opencv 2.X 参考注释),详细如代码 import numpy as np im ...
- oracle 导入 dmp
执行命令 imp his/his@orcl File=/home/oracle/core_his50_common.dmp FULL=Y
- tomcat发布项目绑定域名总结
现在很多的公司的网站都是用tomcat作为应用服务区的,可是对于初学者,8080端口号是如何去掉的,这些网站是如何和域名绑定到一起的呢?一个tomcat是如何绑定多域名?并且这些域名是如何对应不同的项 ...
- php 运行的四种模式
1)cgi 通用网关接口(Common Gateway Interface)) CGI即通用网关接口(Common Gateway Interface),它是一段程序, 通俗的讲CGI就象是一座桥,把 ...
- Xamarin.Android 使用Timer 并更改UI
http://blog.csdn.net/ozhangsan12345/article/details/72653070 第一步:创建timer对象 //创建timer对象 Timer _dispat ...
- CSS中的url()到底要不要加引号
如:url(images/background.gif)和 url("images/background.gif") 从安全角度来讲是要加上的 否则容易被xss 因为"& ...
- file上传图片获取路径地址
file上传图片获取路径地址 类似:点击button,选择图片,在对应的输入框input里面显示图片路径地址 类似这样 原理:通过opacity来隐藏原生的input file 然后用.file-bt ...