【arc101】比赛记录
这场还好切出了D,rt应该能涨,然而这场的题有点毒瘤,700分的D没多少人切,更别说EF了。(暴打出题人)既然这样,干脆就水一篇博客,做个简单的比赛记录。
C - Candles
这题是一道一眼题,花了大约30s看懂题意,然后就想到做法开始敲。
首先先把蜡烛的坐标从小到大排序,我们要点亮的蜡烛一定在一个区间里,因此若我们要点亮区间$ [i,i+k) $的蜡烛我们可以这么走:先走到蜡烛$ i $和$ i-k+1 $中较近的一根,然后再走向另一根,并把途径的蜡烛全部点亮。这样的花费是$ \min(|x_i|,|x_{i+k-1}|)+x_{i+k-1}-x_i $。于是扫一遍顺便维护最小值答案即可。
然而我因为括号有点多,敲错了一个傻逼错误,调了快10min才调出来。。QAQ
代码:(时间复杂度$ O(n \log(n)) $)
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<ctime>
#include<algorithm>
#include<queue>
#include<vector>
#include<map>
#define ll long long
#define ull unsigned long long
#define max(a,b) (a>b?a:b)
#define min(a,b) (a<b?a:b)
#define lowbit(x) (x& -x)
#define mod 1000000007
#define inf 0x3f3f3f3f
#define eps 1e-18
#define maxn 1000010
inline ll read(){ll tmp=; char c=getchar(),f=; for(;c<''||''<c;c=getchar())if(c=='-')f=-; for(;''<=c&&c<='';c=getchar())tmp=(tmp<<)+(tmp<<)+c-''; return tmp*f;}
inline ll power(ll a,ll b){ll ans=; for(;b;b>>=){if(b&)ans=ans*a%mod; a=a*a%mod;} return ans;}
inline ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
inline void swap(int &a,int &b){int tmp=a; a=b; b=tmp;}
using namespace std;
int a[maxn];
int n,k;
int main()
{
n=read(); k=read();
for(int i=;i<=n;i++)a[i]=read();
sort(a+,a+n+);
// for(int i=1;i<=n;i++)printf("%d %d\n",i,a[i]);
int ans=inf;
for(int i=k;i<=n;i++)
ans=min(ans,min(abs(a[i]),abs(a[i-k+]))+a[i]-a[i-k+]);
printf("%d\n",ans);
return ;
}
arc101C
D - Median of Medians
感觉我思想江化了,总是在想怎么快速求出以某个数为中位数的区间个数,推了一堆式子也没搞出来。最后看到hjw巨佬一句“二分答案”,方如醍醐灌顶地想出了解法。(orzhjw!!!)
首先我们先二分最后序列的中位数。设$ tot $为中位数$>= mid $的区间个数,若中位数序列的中位数$>= mid $,则有$ tot>=\lfloor \frac{n(n+1)}{4} \rfloor $。
那么如何求$ tot $?
我们另外构造一个序列$ b $,当$ a_i>=mid $时$ b_i=1 $,否则 $ b_i=-1 $。那么若区间$ [l,r] $的中位数$ >= mid $,则有$ \sum_{i=l}^{r} b_i>mid $,于是我们求出序列$ b $的前缀和序列$ sum $,那么问题就变成了求满足$ l<r $且$ sum[r]-sum[l]>=0 $的数对$ (l,r) $数量$ (0<=l,r<=n) $,这个问题可以用与求逆序对数量相似的方法解决。蒟蒻我就直接上树状数组了。
代码:(时间复杂度$ O(n \log^2(n) $)
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<ctime>
#include<algorithm>
#include<queue>
#include<vector>
#include<map>
#define ll long long
#define ull unsigned long long
#define max(a,b) (a>b?a:b)
#define min(a,b) (a<b?a:b)
#define lowbit(x) (x& -x)
#define mod 1000000007
#define inf 0x3f3f3f3f
#define eps 1e-18
#define maxn 100010
inline ll read(){ll tmp=; char c=getchar(),f=; for(;c<''||''<c;c=getchar())if(c=='-')f=-; for(;''<=c&&c<='';c=getchar())tmp=(tmp<<)+(tmp<<)+c-''; return tmp*f;}
inline ll power(ll a,ll b){ll ans=; for(;b;b>>=){if(b&)ans=ans*a%mod; a=a*a%mod;} return ans;}
inline ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
inline void swap(int &a,int &b){int tmp=a; a=b; b=tmp;}
using namespace std;
int bit[*maxn];
int a[maxn];
int n;
void add(int x,int k){for(;x<=*n;x+=lowbit(x))bit[x]+=k;}
int getsum(int x){int sum=; for(;x;x-=lowbit(x))sum+=bit[x]; return sum;}
int check(int mid)
{
for(int i=;i<=*n;i++)bit[i]=;
ll tot=,sum=;
add(n,);
for(int i=;i<=n;i++){
sum+=(a[i]>=mid?:-);
tot+=getsum(sum+n);
add(sum+n,);
}
// printf("%d %lld\n",mid,tot);
return tot>=1ll*n*(n+)/;
}
int main()
{
n=read();
int mx=-inf,mn=inf;
for(int i=;i<=n;i++){
a[i]=read();
mx=max(mx,a[i]); mn=min(mn,a[i]);
}
int l=mn,r=mx;
while(l<r){
int mid=(l+r+)>>;
if(check(mid))l=mid;
else r=mid-;
}
printf("%d\n",l);
}
arc101D
E - Ribbons on Tree
以后填吧。。。
F - Robots and Exits
同上。。。
【arc101】比赛记录的更多相关文章
- 【cf比赛记录】Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4)
比赛传送门 只能说当晚状态不佳吧,有点头疼感冒的症状.也跟脑子没转过来有关系,A题最后一步爆搜没能立即想出来,B题搜索没有用好STL,C题也因为前面两题弄崩了心态,最后,果然掉分了. A:简单数学 B ...
- 【cf比赛记录】Codeforces Round #605 (Div. 3)
比赛传送门 Div3真的是暴力杯,比div2还暴力吧(这不是明摆的嘛),所以对我这种一根筋的挺麻烦的,比如A题就自己没转过头来浪费了很久,后来才醒悟过来了.然后这次竟然还上分了...... A题:爆搜 ...
- 【cf比赛记录】Educational Codeforces Round 78 (Rated for Div. 2)
比赛传送门 A. Shuffle Hashing 题意:加密字符串.可以把字符串的字母打乱后再从前面以及后面接上字符串.问加密后的字符串是否符合加密规则. 题解:字符串的长度很短,直接暴力搜索所有情况 ...
- 【cf比赛记录】Codeforces Round #601 (Div. 2)
Codeforces Round #601 (Div. 2) ---- 比赛传送门 周二晚因为身体不适鸽了,补题补题 A // http://codeforces.com/contest/1255/p ...
- 【cf比赛记录】Codeforces Round #600 (Div. 2)
Codeforces Round #600 (Div. 2) ---- 比赛传送门 昨晚成绩还好,AC A,B题,还能上分(到底有多菜) 补了C.D题,因为昨晚对C.D题已经有想法了,所以补起题来也快 ...
- BestCoder Round #92 比赛记录
上午考完试后看到了晚上的BestCoder比赛,全机房都来参加 感觉压力好大啊QAQ,要被虐了. 7:00 比赛开始了,迅速点进了T1 大呼这好水啊!告诉了同桌怎么看中文题面 然后就开始码码码,4分1 ...
- [Codeforces 872]比赛记录
强行打了$cf$上的第一场比赛,现在感觉自己的$rating$会炸飞= = A 这是练习输入输出吗QAQ,竟然$WA$了两遍QAQ,我$WA$的一声就哭了出来啊QAQ B 好像很水的乱扫就好了,m ...
- 【cf比赛记录】Codeforces Round #604 (Div. 2)
比赛传送门 感觉这场是最近以来做过的最顺手的一场,持续上分,开心w A了 前三题,然后第四题其实还有半个多小时,但怕身体撑不住,就先退了,其实第四题也很简单 自己认为的算法标签: A.暴力模拟.字 ...
- 【cf比赛记录】Educational Codeforces Round 77 (Rated for Div. 2)
比赛传送门 这场题目前三题看得挺舒服的,没有臃肿的题目,对于我这种英语渣渣就非常友好,但因为太急了,wa了两发A后才意识到用模拟(可以删了,博主真的是个菜鸟),结果导致心态大崩 ---- 而且也跟最近 ...
随机推荐
- Android OpenCV图像转换
1.Mat存储到本地: public void saveMatData(Mat mat) { File fileDir = new File(Environment.getExternalStorag ...
- Android UI开发第二十六篇——Fragment间的通信
为了重用Fragment的UI组件,创建的每个Fragment都应该是自包含的.有它自己的布局和行为的模块化组件.一旦你定义了这些可重用的Fragment,你就可以把它们跟一个Activity关联,并 ...
- BZOJ 2431
2431: [HAOI2009]逆序对数列 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 1521 Solved: 883[Submit][Statu ...
- 《从零开始学Swift》学习笔记(Day 34)——静态属性是怎么回事?
原创文章,欢迎转载.转载请注明:关东升的博客 我先来设计一个类:有一个Account(银行账户)类,假设它有3个属性:amount(账户金额).interestRate(利率)和owner(账户名). ...
- ibatis 大于等于小于等于的写法
在ibatis的sql语句xml配置文件中,写sql语句会经常用到大于等于小于等于等等符号.网上搜罗了一些写法,大致有3种: 其实就是xml特殊符号,转义的方式. < < > > ...
- php学习笔记8--半边引号引发的问题
前段时间重装了系统,后来说是又要用php,就重新搭建了apache+php+mysql的环境,由于之前搭建过好多次,感觉很easy,很快就搭建完成,然后写了下面的常用的测试环境的代码: <?ph ...
- 巨蟒django之权限6: 权限控制表设计&&登录权限
1.权限控制表设计 内容 . 什么是权限? . 为什么要有权限? 不同用户拥有不同的功能 . 在web开发中,什么是权限? url 代表 权限 . 开发一个权限的组件,为什么要开发组件? . 表结构的 ...
- 【转】@javax.ws.rs Webservice注解
用于webservice. 1.路径 @javax.ws.rs.Path 标识要请求的资源类或资源方法的uri路径. 例,@Path("animal"),表示下一层路径是anima ...
- Python判断网络是否可以访问
import urllib url = "http://www.baidu.com" try: status = urllib.urlopen(url).code print st ...
- 家里网速北京联通100m光纤
http://www.speedtest.net/ http://cs1.bbn.com.cn:8800/gzweb/index.jsp