模拟+Trie+桶排(归并?)+容斥


A

  模(shou)拟(su)题= =感觉好像见过?

  计算得分什么的……

 //BestCoder #44 A
#include<vector>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define rep(i,n) for(int i=0;i<n;++i)
#define F(i,j,n) for(int i=j;i<=n;++i)
#define D(i,j,n) for(int i=j;i>=n;--i)
#define pb push_back
using namespace std;
inline int getint(){
int v=,sign=; char ch=getchar();
while(ch<''||ch>''){ if (ch=='-') sign=-; ch=getchar();}
while(ch>=''&&ch<=''){ v=v*+ch-''; ch=getchar();}
return v*sign;
}
const int N=1e5+,INF=~0u>>;
typedef long long LL;
/******************tamplate*********************/
const int b[]={,,,,}; int main(){
int T=getint();
F(CS,,T){
int ans=;
F(i,,){
int x=getint(),y=getint();
ans+=max(b[i]*0.4,(b[i]*(250.0-x)/250.0)-y*);
}
printf("Case #%d: %d\n",CS,ans);
}
return ;
}

B

  给一个数组$A_i$,问$\sum_{i,j} lowbit(A_i \otimes A_j)$等于?

  Trie树随便搞搞= =,因为从Trie上从上往下走到节点x,这个节点代表的子树中的所有数,它们的前缀是相同的(从二进制角度来看,后面xxx位都是相同的),所以前缀的异或为0,左子树中的数与右子树中的数的异或值的lowbit即为(1<<dep),dep即为当前点的深度。。。

  所以遍历一遍整个Trie就可以算出来答案了= =

  就是要注意一下,如果后缀都是0(从二进制角度来看是靠前的位),也要在Trie中补齐

 //BestCoder #44 B
#include<vector>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define rep(i,n) for(int i=0;i<n;++i)
#define F(i,j,n) for(int i=j;i<=n;++i)
#define D(i,j,n) for(int i=j;i>=n;--i)
#define pb push_back
using namespace std;
inline int getint(){
int v=,sign=; char ch=getchar();
while(ch<''||ch>''){ if (ch=='-') sign=-; ch=getchar();}
while(ch>=''&&ch<=''){ v=v*+ch-''; ch=getchar();}
return v*sign;
}
const int N=5e6+,INF=~0u>>,P=;
typedef long long LL;
/******************tamplate*********************/ int c[N][],size[N],tot;
int n,m,a[N],ans; void Insert(int v){
int x=;
F(i,,){
int j=v&;
if (!c[x][j]) c[x][j]=++tot;
size[x]++;
x=c[x][j]; v>>=;
}
size[x]++;
}
void dp(int x,int len){
if (!x||size[x]==) return;
// printf("dp %d %d ",x,len);
// printf("size[L]=%d size[R]=%d\n",size[c[x][0]],size[c[x][1]]);
ans=((LL)ans+(LL)size[c[x][]]*size[c[x][]]%P*(<<len)%P)%P;
dp(c[x][],len+); dp(c[x][],len+);
}
int main(){
#ifndef ONLINE_JUDGE
freopen("B.in","r",stdin);
freopen("B.out","w",stdout);
#endif
int T=getint();
F(cs,,T){
printf("Case #%d: ",cs);
n=getint();
memset(c,,sizeof c); tot=;
memset(size,,sizeof size);
F(i,,n){
a[i]=getint();
Insert(a[i]);
}
ans=;
dp(,);
printf("%d\n",(ans*)%P);
/* ans=0;
F(i,1,n) F(j,1,n){
int tmp=a[i]^a[j];
ans+=tmp&(-tmp);
}
printf("%d\n",ans);
*/ }
return ;
}

C

  这个题其实我不会做= =

  我yy的方法是:对A数组建出一棵Trie,然后对于每一个在B中的数,从Trie上往下走,向0走的时候b[i]>>=1,向1走的时候b[i]=(b[i]+1>>1)(执行加法)

  然而这样是$O(n^2*log^2n)$的……这样做还不如暴力2333

  膜了jiry_2老司机的代码,原来是从高位到低位依次计算,桶排一下,将这一位是0的放到一起,是1的放到一起……然后利用一下容斥原理&单调性,搞出和中这一位是1的数量,异或一下。。。

 //BestCoder #44 C
#include<vector>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define rep(i,n) for(int i=0;i<n;++i)
#define F(i,j,n) for(int i=j;i<=n;++i)
#define D(i,j,n) for(int i=j;i>=n;--i)
#define pb push_back
using namespace std;
typedef long long LL;
inline LL getint(){
LL v=,sign=; char ch=getchar();
while(ch<''||ch>''){ if (ch=='-') sign=-; ch=getchar();}
while(ch>=''&&ch<=''){ v=v*+ch-''; ch=getchar();}
return v*sign;
}
const int N=1e5+,INF=~0u>>;
/******************tamplate*********************/ int n,tot;
vector<LL>A[];
LL x[N],y[N];
int main(){
#ifndef ONLINE_JUDGE
freopen("C.in","r",stdin);
freopen("C.out","w",stdout);
#endif
int T=getint();
F(cs,,T){
printf("Case #%d: ",cs);
n=getint();
F(i,,n) x[i]=getint();
F(i,,n) y[i]=getint();
LL num=;
F(now,,){
A[].clear(); A[].clear();
F(i,,n) A[x[i]>>now&].pb(x[i]);
int head=;
rep(i,A[].size()) x[++head]=A[][i];
rep(i,A[].size()) x[++head]=A[][i];
A[].clear(); A[].clear();
F(i,,n) A[y[i]>>now&].pb(y[i]);
head=;
rep(i,A[].size()) y[++head]=A[][i];
rep(i,A[].size()) y[++head]=A[][i];
LL tot=(1LL<<(now+))-,lim=1LL<<now,lim2=(1LL<<now+),ans=;
int a=,b=,c=;
D(i,n,){
while(a<n && (x[i]&tot)+(y[a+]&tot)<lim)a++;
while(b<n && (x[i]&tot)+(y[b+]&tot)<lim2)b++;
while(c<n && (x[i]&tot)+(y[c+]&tot)<lim+lim2)c++;
ans+=n-c+b-a;
}
if (ans&) num|=(1LL<<now);
}
printf("%lld\n",num);
}
return ;
}

【BestCoder】【Round#44】的更多相关文章

  1. 【BestCoder】【Round#41】

    枚举+组合数?+DP+数学问题 http://bestcoder.hdu.edu.cn/contests/contest_show.php?cid=582 QAQ许久没打过比赛,来一发BC,结果还是只 ...

  2. 【CC评网】2013.第44周 把握每天的第一个小时

    [CC评网]2013.第44周 把握每天的第一个小时 更简单的格式 终于投入到markdown的怀抱.让博客的写作回归到内容本身,同时也能保证阅读的良好体验:如果有心情,写个js,提取h3 h2标题组 ...

  3. 1344:【例4-4】最小花费 dijkstra

    1344:[例4-4]最小花费 Dijkstra (1)a [ i ] [ j ] 存转账率(..转后所得率..) (2)dis [ i ] 也就是 a [ 起点 ] [ i ] (3)f [ i ] ...

  4. 【手抖康复训练1 】Codeforces Global Round 6

    [手抖康复训练1 ]Codeforces Global Round 6 总结:不想复习随意打的一场,比赛开始就是熟悉的N分钟进不去时间,2333,太久没写题的后果就是:A 题手抖过不了样例 B题秒出思 ...

  5. 【codeforces】【比赛题解】#851 CF Round #432 (Div.2)

    cf真的难…… 点我浏览丧题. [A]Arpa和她对墨西哥人浪的研究 Arpa正在对墨西哥人浪进行研究. 有n个人站成一排,从1到n编号,他们从时刻0开始墨西哥人浪. 在时刻1,第一个人站起来.在时刻 ...

  6. 【2000*】【Codeforces Round #518 (Div. 1) [Thanks, Mail.Ru!] B】Multihedgehog

    [链接] 我是链接,点我呀:) [题意] [题解] 找到度数为1的点. 他们显然是叶子节点. 然后每个叶子节点. 往上进行bfs. 累计他们的父亲节点的儿子的个数. 如果都满足要求那么就继续往上走. ...

  7. 【44.64%】【codeforces 743C】Vladik and fractions

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  8. 【cf补题记录】Codeforces Round #608 (Div. 2)

    比赛传送门 再次改下写博客的格式,以锻炼自己码字能力 A. Suits 题意:有四种材料,第一套西装需要 \(a\).\(d\) 各一件,卖 \(e\) 块:第二套西装需要 \(b\).\(c\).\ ...

  9. 【iScroll源码学习04】分离IScroll核心

    前言 最近几天我们前前后后基本将iScroll源码学的七七八八了,文章中未涉及的各位就要自己去看了 1. [iScroll源码学习03]iScroll事件机制与滚动条的实现 2. [iScroll源码 ...

随机推荐

  1. linux用户下的.profile文件丢失

    登录用户时出现以下问题: #su - wqq-bash-4.1$ -bash-4.1$ 查看时发现环境变量文件丢失造成的 解决方法: # ls -la /etc/skel/  total 36drwx ...

  2. mysql关联表插入-php环境中

    $insertsql=<<<EOTinsert into tb_manager values(null,'$name','$pwd','1');select @pid:=last_i ...

  3. python中list和str互转

    1.list转str 假设有一个名为test_list的list,转换后的str名为test_str 则转换方法: test_str = "".join(test_list) 例子 ...

  4. 【知了堂学习笔记】java web 简单的登录

    最近皮皮潇在学习java web,刚接触了简单的东西,所以今天给大家带来一个简单的登录实现. 页面: 页面代码: <%@ page language="java" conte ...

  5. MySQL服务器 IO 100%的案例分析

    [问题] 有台MySQL 5.6.21的数据库实例以写入为主,IO %util接近100% 写入IOPS很高 [分析过程] 1.通过iotop工具可以看到当前IO消耗最高的mysql线程 2.查看线程 ...

  6. Java注解Annotation(一)

    Java注解Annotation(一)——简介 这一章首先简单介绍一下注解,下一章会给出一个注解应用的DEMO. 1. 元注解 元注解的作用是负责注解其他的注解. JDK1.5中,定义了4个标准的me ...

  7. Java 中的异常处理机制

    生活中的异常:  不能够完整而顺利的完成一些工作 根据不同的异常进行相应的处理,而不会就此终端我们的生活 引出:  异常处理: 方式:  1.选择结构(逻辑判断)避免 demo:if逻辑处理异常 im ...

  8. luoguP3185 [HNOI2007]分裂游戏 枚举 + 博弈论

    每个位置的瓶子中的每个石子是一个独立的游戏 只要计算出他们的\(sg\)值即可 至于方案数,反正不多\(n^3\)暴力枚举即可 反正怎么暴力都能过啊 复杂度\(O(Tn^3)\) #include & ...

  9. Kolibri v2.0-Buffer Overflow成功复现

    Kolibri v2.0-Buffer Overflow成功复现及分析 文件下载地址:http://pan.baidu.com/s/1eS9r9lS 正文 本次讲解用JMP ESP的方法溢出 关于网上 ...

  10. java多线程技术之八(锁机制)

    Lock是java.util.concurrent.locks包下的接口,Lock 实现提供了比使用synchronized 方法和语句可获得的更广泛的锁定操作,它能以更优雅的方式处理线程同步问题,我 ...