【BestCoder】【Round#44】
模拟+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】的更多相关文章
- 【BestCoder】【Round#41】
枚举+组合数?+DP+数学问题 http://bestcoder.hdu.edu.cn/contests/contest_show.php?cid=582 QAQ许久没打过比赛,来一发BC,结果还是只 ...
- 【CC评网】2013.第44周 把握每天的第一个小时
[CC评网]2013.第44周 把握每天的第一个小时 更简单的格式 终于投入到markdown的怀抱.让博客的写作回归到内容本身,同时也能保证阅读的良好体验:如果有心情,写个js,提取h3 h2标题组 ...
- 1344:【例4-4】最小花费 dijkstra
1344:[例4-4]最小花费 Dijkstra (1)a [ i ] [ j ] 存转账率(..转后所得率..) (2)dis [ i ] 也就是 a [ 起点 ] [ i ] (3)f [ i ] ...
- 【手抖康复训练1 】Codeforces Global Round 6
[手抖康复训练1 ]Codeforces Global Round 6 总结:不想复习随意打的一场,比赛开始就是熟悉的N分钟进不去时间,2333,太久没写题的后果就是:A 题手抖过不了样例 B题秒出思 ...
- 【codeforces】【比赛题解】#851 CF Round #432 (Div.2)
cf真的难…… 点我浏览丧题. [A]Arpa和她对墨西哥人浪的研究 Arpa正在对墨西哥人浪进行研究. 有n个人站成一排,从1到n编号,他们从时刻0开始墨西哥人浪. 在时刻1,第一个人站起来.在时刻 ...
- 【2000*】【Codeforces Round #518 (Div. 1) [Thanks, Mail.Ru!] B】Multihedgehog
[链接] 我是链接,点我呀:) [题意] [题解] 找到度数为1的点. 他们显然是叶子节点. 然后每个叶子节点. 往上进行bfs. 累计他们的父亲节点的儿子的个数. 如果都满足要求那么就继续往上走. ...
- 【44.64%】【codeforces 743C】Vladik and fractions
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- 【cf补题记录】Codeforces Round #608 (Div. 2)
比赛传送门 再次改下写博客的格式,以锻炼自己码字能力 A. Suits 题意:有四种材料,第一套西装需要 \(a\).\(d\) 各一件,卖 \(e\) 块:第二套西装需要 \(b\).\(c\).\ ...
- 【iScroll源码学习04】分离IScroll核心
前言 最近几天我们前前后后基本将iScroll源码学的七七八八了,文章中未涉及的各位就要自己去看了 1. [iScroll源码学习03]iScroll事件机制与滚动条的实现 2. [iScroll源码 ...
随机推荐
- 湖南联通发福利了C#为你月赚150M流量回家过年不再愁
回家过年没流量怎么能行,这里教大家一个月赚150流量的方法,哈哈,首先下载联通客户端,本人只有android手机一台,没办法只能用 android的了,里面有一个悦分享,上几张图,图有有我赚的流量. ...
- bzoj 1212: [HNOI2004]L语言
思路:字典树+dp, dp[ i ] 表示 前缀到 i 能不能被理解, 如果dp[ i ] 是能被理解的那么, 把i + 1, i + 2 .... 在字典树上走,走到一个单词就转移. ,这样可行的 ...
- 初始Winsock编程
1.套接字的创建和关闭 使用套接字之前,必须使用socket函数创建一个套接字,此函数调用成功将返回一个套接字句柄. 1 SOCKET socket( 2 int af, //用来指定套接字使用的地址 ...
- oracle中vsize和length
其实LENGTH与VSIZE这两个函数联系不大,区别很大.虽然都是“取长度”,但是LENGTH函数结果是“有多少个字符”,VSIZE结果是“需要多少bytes”.简单看一下这两个函数. 1.创建表T并 ...
- IOS 本地推送
// 1.打开本地推送并设置属性 NSString *str = @"本地推送的信息"; UIApplication *app = [UIApplication sharedApp ...
- Hadoop整理四(Hadoop分布式计算框架MapReduce)
Apache Hadoop YARN (Yet Another Resource Negotiator,另一种资源协调者)是一种新的 Hadoop 资源管理器,它是一个通用资源管理系统,可为上层应用提 ...
- TI科学家谈浮点DSP未来发展
自十多年前浮点数字信号处理器(DSP)诞生以来,便为实时信号处理提供了算术上更为先进的备选方案.不过,定点器件至今仍是业界的主流.当然低成本是主要原因.定点DSP每器件产品的价格很低,这对大规 ...
- UNP学习总结(二)
本文是UNP复习系列的第二篇,主要包括了以下几个内容 UNIX系统下5种I/O模型 阻塞.非阻塞,同步.异步 epoll函数用例 一.Unix下的五种可用I/O模型 阻塞式I/O模型 阻塞式I/O是最 ...
- python opencv3 图像与原始字节转换
git: https://github.com/linyi0604/Computer-Vision # coding:utf8 import cv2 import numpy import os &q ...
- windows下nodejs+npm+bower+git+bootstrap组件环境配置
1.进入nodejs官方网站下载软件(nodejs.org), 2.下载完成后,双击默认安装.安装程序会自动添加环境变量 3.检测nodejs是否安装成功.打开cmd命令行 输入 node - v 显 ...