[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: ...
随机推荐
- UITableView的性能优化1
UITableView作为ios中使用最频繁的控件之一,其性能优化也是常常要面对的,尤其是当数据量偏大并且设备性能不足时.本文旨在总结tableview的几个性能优化tips,并且随着认识的深入,本文 ...
- iOS 获取当前应用的信息以及用户信息:版本号手机号手机型号
NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary]; CFShow(infoDictionary); // ap ...
- bzoj 3712: [PA2014]Fiolki
Description 化学家吉丽想要配置一种神奇的药水来拯救世界.吉丽有n种不同的液体物质,和n个药瓶(均从1到n编号).初始时,第i个瓶内装着g[i]克的第i种物质.吉丽需要执行一定的步骤来配置药 ...
- 腾讯云主机 MySQL 远程访问配置方法
使用腾讯云主机安装 MySQL 之后,需要通过以下步骤进行配置以实现远程访问,主要分为两大部分 一.服务器端口配置 1.如果你的云主机配置了安全组,如果没有配置安全组就可以直接跳过“步骤1”的操作,否 ...
- shell脚本-批量执行机器命令
场景:通过跳板机,批量获取线上机器日志 使用方式:run2 host 'ls -al /home/admin/' #! /bin/sh USER_NAME=$USER if [ $# -ne 2 ]; ...
- Keep Mind Working
想找一个这样的地方,可以让脑袋持续运转着.不会像游戏一样让人着迷,不会像有色电视一样让人想错地方,也不会像工作一样充满太多严密.就是让脑袋继续转着,适意地思考些什么. 之前会跑去游戏里,至少没有太污. ...
- VS2010 Extension实践(3)——实现自定义配置
在之前的两篇曾提到通过VSSDK(MSDN也叫VSX)来拓宽思路,实现一些MEF Extension所不能做到的功能,比如获取IVsUIShell服务来执行Command等等,这里我给各位看官展示如何 ...
- TP框架设置的LOG_LEVEL不起作用
最近监控系统日志,可是日志是全部级别的日志,没有办法看太多了.只想看有用的信息. 就在config文件中修改了配置文件.可是试了以后并没有变化,log文件还是全部级别的信息. 后来发现调试模式开启着, ...
- 第二章:Python基础の快速认识基本数据类型和操作实战
本课主题 字符串和操作实战 二进制操作实战 List 列表和操作实战 Tuple 元組和操作实战 Dict 字典和操作实战 作業需求 引言 这遍文章简单介绍了 Python 字符串和集合的方法和应用, ...
- c语言贪吃蛇详解5.GameOver功能与显示成绩
c语言贪吃蛇详解5.GameOver功能与显示成绩 以前我们已经做出来了一个能吃东西变长的蛇.不过它好像不会死... 现在就来实现一下game over的功能吧. 写个函数判断蛇是否撞到自己或者撞到墙 ...