一些Gym三星单刷的比赛总结
RDC
2013, Samara SAU ACM ICPC Quarterfinal Qualification Contest
G
思路卡成智障呀!
Round 1:对着这个魔法阵找了半天规律,效果很辣鸡。
Round 2:打表,效果辣鸡。
Round 3:找映射关系 + Pick定理
对于某种颜色的点来讲,必须形成一个网格状方阵的!
设总共有\(s\)种颜色。方阵中相邻两点连线向量为\((x,y)\)
观察网格,注意“一个格子”与“这个格子的左上角”是一一对应的。
因此,由皮克定理:\(x^2+y^2=s+1\)
I
日常不会贪心..........
贪心是不可能贪心的,这辈子都不可能会贪心!
搞DP又不会搞.........
我发现自己一碰到这种什么序列,区间上的贪心DP就直接炸毛。
研究下自己的魔术回路:
- 倒着做【前面对后面有影响,可以睡觉了。】
- 能过挡住第i个石头,那么
PreDamege<=t[i]-d[i],然后就想维护前缀最大值什么的,效果很辣鸡。 - DP:要记录前i个石头吸收了多少伤害,可以睡觉了。
做法:从前往后扫,拿个堆了维护石头,如果要被砸死了,那就丢掉一个伤害值最大的石头。
2013, VI Samara Regional Intercollegiate Programming Contest
A
魔术回路
- 完全在乱搞一气....WAWAWAWAAC,太弱。
注意,找到第一只存活的兔几后,接下来最多也只要牺牲一只小兔几。
慢慢分类讨论.
- 首先是n=1或者k=1这些。
- n%k=1, 最坏的情况:前n/k次,全部失败,剩下那瓶药肯定就是想要的啦!
- n%k>1, 最坏的情况:前n/k次,全部失败,因为现在还有>=2瓶的药没检测,所以还需要再牺牲一只兔几。
- n%k=0, 最坏的情况:前n/k-1次,全部失败,接下来就和上一场情况类似了。
C
看到完美匹配,直接想到Hall定理。然而效果极度辣鸡。
正解:贪心+线段树
写得好凌乱吖!!!
emmm...碰键盘一定一定先把思路整理好吖!!!!
写了半天不知道自己在写什么东西就比较喜了.......
做法:
- 把区间按左端点从小到大排序。对于点P,匹配他的区间,右端点当然越靠左越好!根据这个规律就可以判断是否存在完美匹配。
- 问题的关键是第二步,判断完美匹配是否唯一!对于点P,设与他匹配的区间是S。然后我们判断点P是否能与点Q互换位置,不妨设Q在P左边,那么
S.left <= Q < P,设Q对应的区间为T,PQ能互换的条件是T.right >= P,因此我们使用线段树维护点对应的区间的右端点MAX就好了。
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <vector>
#include <cmath>
#include <cstring>
#include <map>
#include <set>
using namespace std;
typedef long long LL;
#define rd(x) scanf("%d",&x)
#define prt(x) printf("%d\n", x);
#define prtvec(v) for(int i=0;i<v.size();i++) printf("%d%c", v[i], i==(v.size()-1)?'\n':' ');
#define sz(x) (int)x.size()
#define pb(x) push_back(x)
#define rep(i,x,y) for(int i=x;i<=y;i++)
#define per(i,y,x) for(int i=y;i>=x;i--)
const int N=200000+10;
const double EPS = 1e-8;
int n,ret[N],ans[N],now[N];
struct Nod {
int l,r,id;
Nod(){}
Nod(int l_,int r_,int id_) {l=l_,r=r_,id=id_;}
bool operator < (const Nod & o) const {
if(r==o.r) return l == o.l ? id < o.id : l < o.l;
return r < o.r;
}
} nod[N];
struct Interval {
int l, r;
} interval[N];
struct Room {
int id, x;
bool operator < (const Room & o) const {
return x < o.x;
}
} a[N]; int p[N];
set<Nod> st;
bool cmp(Nod a, Nod b) {
return a.l < b.l;
}
int s[N<<2];
void build(int l,int r,int rt){
if(l==r){
s[rt]=interval[ret[l]].r;
return;
}
int mid=(l+r)>>1;
build(l,mid,rt<<1);
build(mid+1,r,rt<<1|1);
s[rt]=max(s[rt<<1],s[rt<<1|1]);
}
int queryMax(int l,int r,int rt,int L,int R){
if(L<=l&&r<=R){
return s[rt];
}
int mid=(l+r)>>1;
int ans=0;
if(L<=mid) ans=queryMax(l,mid,rt<<1,L,R);
if(R >mid) ans=max(ans,queryMax(mid+1,r,rt<<1|1,L,R));
return ans;
}
int main(){
rd(n);
rep(i,1,n) rd(a[i].x), a[i].id=i;
sort(a+1,a+1+n);
rep(i,1,n) p[i]=a[i].x;
rep(i,1,n) now[i]=a[i].id;
rep(i,1,n) rd(nod[i].l), rd(nod[i].r), nod[i].id=i;
sort(nod+1,nod+1+n,cmp);
int las=1;
rep(i,1,n) {
while(las<=n && nod[las].l <= a[i].x) {
st.insert(nod[las]);
las ++;
}
Nod tmp = *st.lower_bound(Nod(-1,a[i].x,0));
ret[i]=tmp.id;
ans[tmp.id]=i;
interval[ret[i]].l = tmp.l;
interval[ret[i]].r = tmp.r;
if (ret[i]==0) return !printf("Let's search for another office.\n");
st.erase(tmp);
}
build(1,n,1);
rep(i,1,n){
int Lb = lower_bound(p+1,p+1+n,interval[ret[i]].l) - p;
int Rb = i-1;
if (Lb > Rb) continue;
int mx = queryMax(1,n,1,Lb,Rb);
if (mx >= a[i].x) {
return !printf("Ask Shiftman for help.\n");
}
}
printf("Perfect!\n");
rep(i,1,n){
printf("%d ", now[ans[i]]);
}
}
F
贪心怕是有完杀效果吧。
对于区间按左端点排序。对于每个点,去左端点尽可能靠左的区间。lower_bound一下就好了。
K
构造长度为n,逆序对为k的排列。
智障的做法1:像[a,...1][b....a+1][c....b+1]....[n....c+1]这样,长度为len的区间对逆序的贡献为len*(len-1)/2,每次都拿出尽可能长的一段。然后惊喜地发现总长度有可能凑不出n.
智障的做法2:BIT + 二分【还被边界杀】,虽然能够,但是....好沙比啊。
不智障的做法:先[a,....1][a+1,.....n]然后把n往左边扯。
一些Gym三星单刷的比赛总结的更多相关文章
- Problem B. Beer Refrigerator
http://codeforces.com/gym/241680/problem/B比赛的时候考虑的是,它们3个尽可能接近,然后好麻烦,不如暴力枚举,这里不需要质因数分解,而是两重循环枚举所有因数,第 ...
- 关于cf[转]
还不怎么熟悉cf呢.. 你应当知道的关于Codeforces的事情 Codeforces简称: cf(所以谈论cf的时候经常被误会成TX的那款游戏).网址: codeforces.com 这是一个俄国 ...
- codeforces之始
很早就听说acmer界的CF嘞!还记得刚开始听到神犇们在讨论CF的时候我还以为是网游CF(穿越火线)呢... 今年刚开学的时候就打算开始打cf的,由于一些事情耽搁了.之后又要准备省赛所以就一直拖到现在 ...
- 如何查看Codeforces的GYM中比赛的数据
前置条件:黄名(rating >= 2100) 或者 紫名(rating >= 1900)并且打过30场计分的比赛. 开启:首先打开GYM的界面,如果符合要求会在右边展示出一个Coach ...
- 阿里云377秒完成100TB数据排序:秒三星百度
阿里云377秒完成100TB数据排序:秒三星百度 今日,Sort Benchmark 在官方网站公布了 2015 年排序竞赛的最终成绩.其中,阿里云用不到 7 分钟(377 秒)就完成了 100TB ...
- [Gym]2008-2009 ACM-ICPC, NEERC, Moscow Subregional Contest
比赛链接:http://codeforces.com/gym/100861 A模拟,注意两个特殊的缩写. #include <bits/stdc++.h> using namespace ...
- Codeforces Gym 101521A Shuttle Bus
题意:给定一个2*N的方格,从左上角开始走,有些格子不能走,问能否一次遍历所有能走的方格 在Gym上看到一场香港的比赛,很好奇就去看了一下,发现第一题很有趣,并且很水,似乎讨论一下奇偶性就行了,然后. ...
- Gym 100952F&&2015 HIAST Collegiate Programming Contest F. Contestants Ranking【BFS+STL乱搞(map+vector)+优先队列】
F. Contestants Ranking time limit per test:1 second memory limit per test:24 megabytes input:standar ...
- codeforces gym #102082C Emergency Evacuation(贪心Orz)
题目链接: https://codeforces.com/gym/102082 题意: 在一个客车里面有$r$排座位,每排座位有$2s$个座位,中间一条走廊 有$p$个人在车内,求出所有人走出客车的最 ...
随机推荐
- Android 官方命令深入分析之android
作者:宋志辉 android命令是一个非常重要的开发工具,它可以: 创建.删除和查看Android Virtual Devices(AVDs). 创建和更新android项目. 更新你的android ...
- RabbitMQ消息队列(六):使用主题进行消息分发
在上篇文章RabbitMQ消息队列(五):Routing 消息路由 中,我们实现了一个简单的日志系统.Consumer可以监听不同severity的log.但是,这也是它之所以叫做简单日志系统的原因, ...
- iOS编程中的音频知识(一):文件格式和数据格式,哦!天哪
要明白实际上每个音频文件都有2各部分组成:它的文件格式(或称之为音频容器),和它的数据格式(或称之为音频编码). 文件格式(audio containers)描述文件自身的格式.实际内部的音频数据可以 ...
- (NO.00003)iOS游戏简单的机器人投射游戏成形记(十七)
现在玩家选择机器人后,可以在屏幕上或手臂上点击来移动robot's arm了. 但是玩家选择一个机器人后没有视觉效果来表明哪个机器人被选中.玩家做了一个操作后没有视觉反馈会惹恼强迫症用户滴 ;) 这篇 ...
- Linux下修改Oracle数据库字符集命令
常见情形:从服务器备份Oracle数据库后再到本地机器上还原Oracle数据库的时候经常会碰见数据库字符编码不一致的情况,可以用以下命令来修改本地的Oracle数据库字符编码,然后顺利还原Oracle ...
- Python+Visual Studio
一直在找一个比较好的Python IDE,无奈找来找去都不太好用,由于经常用Visual Studio,所以很希望找到一个能够在VS中的Python扩展.今天发现了一个很给力的VS扩展,可以在VS中方 ...
- C#之委托和事件
我想,读者们可能看过一部电影叫<全民目击>,在电影中,富豪林泰婚期将至,准新娘却惨死地下停车场,林泰的富二代女儿林萌萌成为最大嫌疑人,林泰不惜重金聘请国内顶级律师周莉为女儿辩护,而公诉方却 ...
- C语言中sizeof与strlen区别
本文转载自:http://www.2cto.com/kf/201109/105100.html 1. 以字符串形式出现的,编译器都会为该字符串自动添加一个0作为结束符,如在代码中写"abc& ...
- AndroidBinder进程间通信系统-android学习之旅(86)
目录 前言及知识准备 Service组件结构 Clinet组件结构 与Binder驱动程序交互 总结 Binder进程间通信实例 问题 本次主要介绍Android平台下Binder进程间通信库.所谓通 ...
- 【面试笔试算法】Program 5 : 推箱子 (网易游戏笔试题)
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 推箱子是一款经典游戏.如图所示,灰色格子代表不能通过区域,蓝色方格是箱子,黑色圆形代表玩家,含有圆点的格子代表目标点. 规 ...