2018.9.22 Bubble Cup 11-Finals(Online Mirror,Div.2)
感受了一下ACM的感觉,然后被神题和神犇们暴踩了
夭寿啦,机房大佬非法组队啊
比赛前i207M插的“怕不是不到九点就要弃疗”的flag成功生效
一开始先扫了一遍题,我一开始以为A题是个扫一遍的题,然后发现自己naive了,遭到了wyt的嘲讽,不过i207M觉得这是个权值数据结构,然而我太蒻了并不会,于是他就去写了。然后就听到Zhang_RQ说B题是个圆方树,果断弃了,终于发现C很可做,这不是泡泡堂么,然后我写了一发过掉了。然后i207M交了一发$A$挂了,发现他读错题了,然后就听到zhoutb2333说这是个CDQ,我们又(?)果断弃掉了=。=
然后wyt跟我说F是个大根堆?(我**居然信了)
然后他T了,我觉得是他写萎了,我也按他的思路写了一发
然后我也T了,发现他根本不是写萎了,是想萎了,这不是扫一遍就完了吗=。=
看了看发现H题有不少(十几个?)人A了,我和i207M就去看,转化了一下题面发现这好像是个计数问题。i207M立刻切出来了(!),然而蒟蒻的我一时并没完全听懂,我说我先码着你再想想,码到一半他又跟我说了说终于听懂了,然后测一发样例
哇,挂啦
i207M发现漏了一种情况,然后他改了一处就过掉了,我一时还在问问问,不过后来想明白了
然后我们就开始找可做题(其实已经没了=。=),他看上了$E$我看上了$G$,然后他说完$E$我们感觉没什么特别明显的思路,不过他觉得$G$很可做,然后我就去看$J$了,感觉$J$是个特别可做的数位DP。结果讨论了半天发现连状态都设不下,于是暂时弃掉了,又去刚$G$结果也无果,最后我们就在九点弃疗了=。=
整个比赛还是很欢乐的,这次只放我们切的三道水题了2333
Update on 2018.9.28:准备更新A和B
Update on 2018.10.9:咕咕了一个多星期之后终于更了A,B还在咕咕咕的路上(滚那
A.AI Robots
考场时众多大佬用CDQ/树套树碾过去了,事实上这个题并不难......
我们将机器人按视力从高到低排序,然后依次考虑每个机器人,把机器人们加入一棵权值线段树。这样如果新加入的机器人能看到之前的机器人的话,之前的这些机器人也能看到新加入的机器人,用线段树维护区间和,就可以直接计算贡献了。现在的问题是智商的差距如何考虑,因为智商的差距非常小,我们可以直接枚举每个智商的差值来统计答案,复杂度$O(nklog$ $n)$。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=;
struct a
{
int p,e,q;
}rob[N];
int un1[N],un2[N];
int root[N],val[*N],son[*N][];
int n,m,l1,l2,cnt,tot;
long long ans;
bool cmp(a x,a y)
{
return x.e>y.e;
}
void add(int &nde,int l,int r,int pos)
{
if(!nde) nde=++tot; val[nde]++;
if(l==r) return ; int mid=(l+r)/;
if(pos<=mid) add(son[nde][],l,mid,pos);
else add(son[nde][],mid+,r,pos);
}
long long query(int nde,int l,int r,int nl,int nr)
{
if(!nde) return ;
if(l>=nl&&r<=nr) return val[nde];
int mid=(l+r)/; long long ret=;
if(nl<=mid) ret+=query(son[nde][],l,mid,nl,nr);
if(mid<nr) ret+=query(son[nde][],mid+,r,nl,nr);
return ret;
}
int main ()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
{
scanf("%d%d%d",&rob[i].p,&rob[i].e,&rob[i].q);
un1[i]=rob[i].p,un2[i]=rob[i].q;
}
sort(rob+,rob++n,cmp);
sort(un1+,un1++n),l1=unique(un1+,un1++n)-un1-;
sort(un2+,un2++n),l2=unique(un2+,un2++n)-un2-;
for(int i=;i<=n;i++)
{
rob[i].p=lower_bound(un1+,un1++l1,rob[i].p)-un1;
rob[i].q=lower_bound(un2+,un2++l2,rob[i].q)-un2;
}
for(int i=;i<=n;i++)
{
for(int j=-m;j<=m;j++)
{
int pos=lower_bound(un2+,un2++l2,un2[rob[i].q]+j)-un2;
int ll=lower_bound(un1+,un1++l1,un1[rob[i].p]-rob[i].e)-un1;
int rr=upper_bound(un1+,un1++l1,un1[rob[i].p]+rob[i].e)-un1-;
if(un2[pos]==un2[rob[i].q]+j)
ans+=query(root[pos],,l1,ll,rr);
}
add(root[rob[i].q],,l1,rob[i].p);
}
printf("%lld",ans);
return ;
}
C.Space Formula
首先把最大的$b$配给我们的选手,然后(按其他选手实力)从大到小贪心。如果这个人配上最小的都能赢我们就把最大的给他,减小之后的压力,否则找一个尽可能大的给他让他打不过我们,易知这样最优(详见ZJOI 泡泡堂)
#include<set>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=;
long long a[N],b[N],aa[N],bb[N];
long long n,d,l1,l2,p1,p2,rnk;
multiset<long long> st;
multiset<long long>::iterator it;
int main ()
{
scanf("%lld%lld",&n,&d);
for(int i=;i<=n;i++) scanf("%lld",&a[i]);
for(int i=;i<=n;i++) scanf("%lld",&b[i]);
long long forc=a[d]+b[];
for(int i=;i<=n;i++) if(i!=d) aa[++l1]=a[i];
for(int i=n;i>=;i--) st.insert(b[i]); rnk=;
for(int i=;i<=l1;i++)
{
if(aa[i]>forc) rnk++,it=st.end(),it--,st.erase(it);
else
{
if(aa[i]+(*(st.begin()))>forc) {rnk++,it=st.end(),it--,st.erase(it);continue;}
long long res=forc-aa[i];it=st.upper_bound(res);
it--; st.erase(it);
}
}
printf("%lld",rnk);
return ;
}
F.Splitting money
扫一遍的大水题,不想多说
#include<queue>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
long long bit[];
long long n,maxx,c,ans;
int main ()
{
scanf("%lld",&n);
for(int i=;i<=n;i++)
scanf("%lld",&bit[i]);
scanf("%lld%lld",&maxx,&c);
for(int i=;i<=n;i++)
if(bit[i]>maxx)
ans+=((long long)ceil((double)(bit[i]-maxx)/(double)(maxx+c)))*c;
printf("%lld",ans);
return ;
}
H.Palindrome Pairs
伪装成字符串的计数题
因为两个串组合后我们可以随便排列字母,所以能否回文显然只跟每个字母在每个串中出现的次数的奇偶性有关。我们把出现奇数次的字母这位看成$1$,出现偶数次的字母这位看成$0$,这样每个串就可以表示为一个$26$位的零一串,拼起来可以看做异或,回文就是异或后只有一位为$1$。因为要求无序的,所以我们直接开个$map$计每种串出现的次数,每次枚举一位统计上当前串这位取反得到串的个数,最后加上这个串出现的次数即可。
#include<map>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=,M=;
map<int,long long> cnt;
char rd[M];
int n,len;
long long ans;
int main ()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%s",rd);
int str=;
int len=strlen(rd);
for(int j=;j<len;j++)
str^=(<<(rd[j]-'a'));
ans+=cnt[str];
for(int j=;j<;j++)
ans+=cnt[str^(<<j)];
++cnt[str];
}
printf("%lld",ans);
return ;
}
2018.9.22 Bubble Cup 11-Finals(Online Mirror,Div.2)的更多相关文章
- Bubble Cup 11 - Finals [Online Mirror, Div. 1]题解 【待补】
Bubble Cup 11 - Finals [Online Mirror, Div. 1] 一场很好玩的题啊! I. Palindrome Pairs 枚举哪种字符出现奇数次. G. AI robo ...
- Bubble Cup 12 - Finals Online Mirror, unrated, Div. 1
Bubble Cup 12 - Finals Online Mirror, unrated, Div. 1 C. Jumping Transformers 我会状压 DP! 用 \(dp[x][y][ ...
- codeforce1046 Bubble Cup 11 - Finals 题解
比赛的时候开G开了3h结果rose说一句那唯一一个AC的是羊的心态就崩了.. 这套题感觉质量挺好然后就back了下 A: AI robots 有三个限制条件:相互能够看见和智商的差.使用主席树,可以维 ...
- Codeforces Bubble Cup 8 - Finals [Online Mirror] B. Bribes lca
题目链接: http://codeforces.com/contest/575/problem/B 题解: 把链u,v拆成u,lca(u,v)和v,lca(u,v)(v,lca(u,v)是倒过来的). ...
- Codeforces Bubble Cup 8 - Finals [Online Mirror]H. Bots 数学
H. Bots Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/575/problem/H Desc ...
- Codeforces Bubble Cup 8 - Finals [Online Mirror] D. Tablecity 数学题
D. Tablecity Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/575/problem/D ...
- Codeforces Bubble Cup 8 - Finals [Online Mirror] F. Bulbo DP
F. Bulbo Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/575/problem/F Des ...
- Bubble Cup X - Finals [Online Mirror]
来自FallDream的博客,未经允许,请勿转载,谢谢. 组了个菜鸡队打cf上的ACM比赛 比较快做完了8题但是菜的抠脚罚时巨多,所以最后被顶到了19名(居然没出首页) 自己的号自从上次疯狂掉分就没动 ...
- Bubble Cup X - Finals [Online Mirror] B. Neural Network country 矩阵快速幂加速转移
B. Neural Network country time limit per test 2 seconds memory limit per test 256 megabytes Due to t ...
随机推荐
- 亚马逊如何变成 SOA(面向服务的架构)
. 亚马逊公司不仅是世界最大的网络书店,还是世界最大的云服务商.它是怎么实现从电商到云商的转变呢? 一切都是CEO杰夫·贝索斯促成的,他对市场有着超乎常人的理解和预见. 2. 2000年前后,贝索斯有 ...
- string类型和int类型之间的转换
一.string转int 1. 使用string流 /* 字符串转整型 */ /* * istringstream:从 string 读取数据 * ostringstream:向 string 写入数 ...
- 20172325 2016-2017-2 《Java程序设计》第四周学习总结
20172325 2016-2017-2 <Java程序设计>第四周学习总结 教材学习内容总结 1.对类.对象.声明变量的定义和属性有了进一步的了解 2.学会如何编写一个类并运用到需要的程 ...
- YQCB冲刺周第七天
站立会议 任务看板 燃尽图 今天的任务为实现个人设置中的修改密码.设置金额的功能.以及界面的美化. 遇到的问题为修改自己密码时获得当前用户的id问题.
- mysql 修改语句及耗时
1.含有某串字母的字段替换: update imagetable set imageID = replace(imageID, 'ZH0211001', 'ZH4111001') 只要imageID含 ...
- linux 常用命令-编辑模式
1.编辑模式就是通过vi或者vim打包文件,进入编辑模式,vim是vi的升级版,vim除了报错vi的命令外还包括一些额外的命令,本文以vim命令为例,如果需要查询而不需要编辑文件则可以通过cat命令查 ...
- servlet几个常用的方法
servlet继承了HTTPServlet所以可以重写父类的方法,下面一 一介绍方法Dopost DoGet 比较常用不再介绍. 一.Init(),和Init(ServletConfig config ...
- java 事务
之前的事务介绍基本都是数据库层面的事务,本文来介绍一下J2EE中和事务相关的内容,在阅读本文之前,希望读者对分布式有一定的了解. 关于事务的基础知识这里不再详细介绍,想要了解的同学可以在我的博客中阅读 ...
- python learning1.py
# 廖雪峰的官方网站 python教材 1~4章 # 格式控制符语法 print('Hello, %s' % 'world') print('hello, %s, you have %d dollar ...
- Unity删除或更换天空盒
Unity版本:5.6.2 点击菜单栏Window-->Lighting-->Settings 在弹出的窗口中,设置Skybox Material选项,从原来的默认天空盒更换成别的,或者选 ...