【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源码 ...
随机推荐
- tp5总结(二)
1.简化路由[一方面可以更好的让搜索引擎抓取:另一方面简化路由,利于记忆] 1-1.在[public/]下面创建admin.php 复制index.php 然后绑定前后台模块define('BIND_ ...
- 创建NuGet包
创建NuGet包 在创建一个NuGet包之前我们应该先创建一个以.nuspec为后缀的xml清单文件,这个清单文件描述了包的内容,在安装NuGet包的过程中这个清单文件扮演者很重要的角色.实际上它的作 ...
- React Native踩坑之FlatList组件中的onEndReached
最近在做一个RN项目,有使用到FlatList这样一个RN封装的组件去做上拉加载更多功能,在iOS和Android平台上,总结了以下几个遇到的问题及解决方案 1. 进入页面onReached开始就被触 ...
- quote函数什么意思,怎么用
转自: https://blog.csdn.net/qiqiyingse/article/details/70046543 quote函数 属于urllib库里面的一个函数 屏蔽特殊的字符.比如如果u ...
- [ 转载 ] Java基础10--关于Object类下所有方法的简单解析
关于Object类下所有方法的简单解析 类Object是类层次结构的根类,是每一个类的父类,所有的对象包括数组,String,Integer等包装类,所以了解Object是很有必要的,话不多说,我们直 ...
- 决策树算法(Bagging与随机森林)
Bagging算法: 将训练数据集进行N次Bootstrap采样得到N个训练数据子集,对每个子集使用相同的算法分别建立决策树,最终的分类(或回归)结果是N个决策树的结果的多数投票(或平均). 其中,B ...
- 解决springboot项目中@Value注解参数值为null的问题
1.错误场景: springboot项目中在.properties文件(.yml)文件中配置了属性值,在Bean中使用@Value注解引入该属性,Bean的构造器中使用该属性进行初始化,此时有可能会出 ...
- Wannafly挑战赛22游记
Wannafly挑战赛22游记 幸运的人都是相似的,不幸的人各有各的不幸. --题记 A-计数器 题目大意: 有一个计数器,计数器的初始值为\(0\),每次操作你可以把计数器的值加上\(a_1,a_2 ...
- hdu 5248 贪心
题意:
- BZOJ 2342: [Shoi2011]双倍回文 马拉车算法/并查集
2342: [Shoi2011]双倍回文 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1123 Solved: 408 题目连接 http://w ...