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往左边扯。

转载于:https://www.cnblogs.com/RUSH-D-CAT/p/8935967.html

一些Gym三星单刷的比赛总结相关推荐

  1. 给各位ACMer,OIer详细介绍一下Codeforces比赛

    Codeforces 简称: cf(所以谈论cf的时候经常被误会成TX的那款游戏). 网址: codeforces.com 这是一个俄国的算法竞赛网站,由来自萨拉托夫州立大学.由Mike Mirzay ...

  2. Codeforces

    1.背景 可能很多人都久闻codeforces网站的大名,却苦于各种各样的区域性问题或玄学问题,没能真正地体验到cf所带来的极致魅力 2.关于codeforces Codeforces 简称: cf( ...

  3. edward_mj退役经验帖

    考完试了,也是时候补上退役帖了. 考虑了一阵要怎么写,鉴于本文的目的主要是希望给后来的校队成员或者想参加这个竞赛的同学一个借鉴,最后还是决定用Q&A的形式. 打ACM/ICPC有什么好处 我觉 ...

  4. codeforces csp复赛训练利器---初识

    codeforces csp复赛训练利器---初识 1.解决codeforces访问慢的问题 网站https://www.codeforces.com打开极慢,换句话说,根本就打不开. 摘自https ...

  5. codeforce比赛规则介绍(转)

    Codeforces 简称: cf(所以谈论cf的时候经常被误会成TX的那款游戏). 网址: codeforces.com 这是一个俄国的算法竞赛网站,由来自萨拉托夫州立大学.由Mike Mirzay ...

  6. CodeForces入门

    codeforces的正确打开方式 https://www.cnblogs.com/muzu/p/7616746.html 1.背景 可能很多人都久闻codeforces网站的大名,却苦于各种各样的区 ...

  7. 码农故事2——岁前落脚得安定 年后求职寻转机

    杨东想着要不给师兄发个信息,先搬回去.但桃子有自己的主张,说,要不先出去找找看有没房,如果找不到,晚上就先把行李搬她宿舍去.杨东没同意,但半天时间找到合适的房子搬出去他却觉得实在渺茫.他也没有马上反驳 ...

  8. codeforces 规则

    Codeforces 简称: cf(所以谈论cf的时候经常被误会成TX的那款游戏). 网址: codeforces.com 这是一个俄国的算法竞赛网站,由来自萨拉托夫州立大学.由Mike Mirzay ...

  9. 关于Codeforce

    Codeforces 简称: cf(所以谈论cf的时候经常被误会成TX的那款游戏). 网址: codeforces.com 这是一个俄国的算法竞赛网站,由来自萨拉托夫州立大学.由Mike Mirzay ...

  10. 关于Codeforces的一点事

    简称: cf(所以谈论cf的时候经常被误会成TX的那款游戏). 网址: codeforces.com 这是一个俄国的算法竞赛网站,由来自萨拉托夫州立大学.由Mike Mirzayanov领导的一个团队 ...

最新文章

  1. python自定义函数找最大值_python – 查找用户定义函数的局部最大值和最小值
  2. Node.js Up and Runing 学习日记(八)
  3. 我为什么对TypeScript由黑转粉?
  4. Seafile 开源企业云盘部署
  5. 第九周LINUX 学习笔记
  6. Illumina联手IBM Watson Health解读癌症基因谱
  7. 第一台电子计算机采用哪位科学家,计算机基础知识试题及答案解析
  8. 对于根目录磁盘满的了问题
  9. java.lang.NoClassDefFoundError: org/w3c/dom/ElementTraversal
  10. Doing It in User Space
  11. 网页上的即时聊天--nodejs学习笔记
  12. span标签置灰_ant-desgin-vue——tree自定义不可选用的置灰或禁用
  13. MEGA使用VCF/Hapmap数据构建进化树
  14. 助教日志_【沈阳航空航天大学软件工程 1,2班】期末排行
  15. 业务流程管理包括什么
  16. ros入门启动小海龟(ros2版本)
  17. 创业故事:挖人的手段
  18. android简易计算器的实现
  19. 阿里计算机视觉笔试题,【阿里巴巴】计算机视觉算法面经(最新)
  20. Ceph-ansible 安装 ceph (rbd + rgw)

热门文章

  1. 【网络流24题】分配问题 最小最大费用最大流
  2. SSIS实践入门1:我的第一个SSIS程序开发
  3. MacBook Pro 下安装 MySQL 5
  4. [Swift]LeetCode306. 累加数 | Additive Number
  5. 前端工程师提高工作效率的几个小技巧
  6. 欠拟合与过拟合概念和局部加权回归
  7. 分享一个圆角自定义的漂亮AlertDialog
  8. CSS3+JS制作的一款图标任意拖动,并且可以放在文件夹中
  9. Asp.Net水晶报表边框不显示之解决方法
  10. uni-app 自定义loading 自定义toast 兼容小程序APP