[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: ...
随机推荐
- 使用Node.js搭建一个本地服务器
let http = require('http'); //创建一个http let server = http.createServer((request,response)=>{ //创建一 ...
- 724. Find Pivot Index
Given an array of integers nums, write a method that returns the "pivot" index of this arr ...
- Java SE 8 流库(四)
1.8. 收集数据 <R,A> R collect(Collector<? super T,A,R> collector) 使用给定的收集器来收集当前流中的元素 void ...
- lodash源码分析之Hash缓存
在那小小的梦的暖阁,我为你收藏起整个季节的烟雨. --洛夫<灵河> 本文为读 lodash 源码的第四篇,后续文章会更新到这个仓库中,欢迎 star:pocket-lodash gitbo ...
- Linux发行版 CentOS6.5 修改默认主机名
修改前准备 我们将主机名修改为comexchan.cnblogs.com(本文发布于http://comexchan.cnblogs.com/) 备份相关配置文件,以便回滚 cp /etc/sysco ...
- MSSQLSERVER并行度
Microsoft SQL Server最大并行度(MAXDOP) 配置选项控制并行计划用于执行查询的处理器的数目.此选项确定用于执行工作并行查询计划运算符的计算和线程资源.根据是否 SQL Serv ...
- sql server 权限
-----是否存在有效的登录账号:是否被禁用,sql login还有:密码是否过期,是否被锁定 select is_disabled, loginproperty(name,'Isexpired') ...
- ubuntu16.04编译安装php7.2
1,下载解压 tar xf php-7.2.0.tar.gz cd php-7.2.0/ 2,安装必要的库 sudo apt-get install libxml2-devsudo apt-get i ...
- Hibernate学习笔记(5)---Query接口
Hibernate中具有三种检索方式(HQL,QBC,SQL) Query接口 一个查询接口,用于向数据库中查询对象.并控制执行查询的过程.Query接口内封装了一个HQL查询语句. 举个栗子 //查 ...
- [SharePoint Online]SharePoint Designer无法打开世纪互联版sp online站点得解决方法,报错信息:请安装更新后再重新打开
现象描述: 装了个x64版SharePoint designer 2013, 没有装SP1,在打开国际版得office 365 online得时候完全没有问题,但是在打开世纪互联版得时候就打不开,让安 ...