您的位置:首页 > 其它

GDCPC2016 参赛总结

2016-05-08 20:21 281 查看
校赛初赛差一名整体进入省赛,被前面的队伍拉去参加,遇见了两位东校这边的师兄,然后最近也就频繁出现在广州(大雾)摆出一副努力打算法的样子,更加努力的展开自己的脑洞.

在东校图书馆看到了很多心仪的CS书目,想到了不久以后能回迁之后的美好场景哈哈哈哈,另外早上食堂的青菜简直得我心意哈哈哈哈~

言归正传,大一第一次有幸参加省赛,除了get一套衣服和get挺喜欢的麦当劳午饭之外,更多的是见识广东算法界的大腿们,以及看看别的学校,尽管在综合名声上没有中大出名,可是在最后的排名上却一点也不弱.

一开始是热身赛,敲了一个线段树的模板之后再给队友热身,过了一个二分查找的变形题和另一个水题之后也算热身了,事实证明这次省赛中没有用到线段树23333

A

拿到题之后开始做A,给出四边形的四条边长和对角线长,判断是否共圆.一开始我和队友脑洞太大,猜了一堆错的推论,最后队长也猜了一个没证出来的方法,求出四个三角形外接圆的半径然后判断是否相等,估计是我离高三比较近的缘故2333贡献了一个正弦定理+余弦定理求半径.然后就过了这道题.

另外赛后题解说可以用余弦定理求圆周角来判断2333

K

队长敲A的时候翻了翻题目,发现K才是真正的水题..

f[0] = a,f[1] = b,f
= f[n-1] xor f[n-2]给出a,b,n,求f

立马转战K发现已经有很多人过了,我已开始觉得10^6数组找循环,木洪一看之后说了一句,异或两次不就回来了吗…..orz然后迅速签到转战下一题

B

构造每个点读数都为3的图.

木洪很清晰的分类成%4 ==0 和2的两种,然后写了一个构造测试了一下过了

J

作为跟着大部队走的姿态,J题过题量较大,两个队友看了看都说是水题然后就开始啃了,

题意是1~N的中序遍历,求第N个数(n<10^9)

佳录建议删除最后一层之后再来左右分别搜索.然后过了样例之后很快过了这题.

一个小时不到1A四题,形势一片大好

这时午饭来了,我看了看翻译摩尔电码的题,拿过电脑开始敲.然而贡献了一个WA默默退下.

F

我退下后佳录说F题可以做.

题意是多个账户赚钱,银行每笔转账要收取手续费,求最后每个人数目相同时候的最大值.

显然二分..佳录敲了一遍没过样例,木洪抢过去敲,把k%去掉后就过了这题

I

摩尔电码的翻译..我贡献了4个WAQAQ然后转交木洪再来了一个

全队万念俱灰的时候发现我理解错题意了,并不是两个相同的字母间只要一个空格…

于是删了我的第一次交的代码6行,6A…校赛后再度拖累罚时QAQ

G

博弈题,Alice知道Bob的权值求最小值.两个队友伟大的脑洞!!!猜出了公式!!!!!…在最后讲题的时候…发现是一个纳什均衡!!!居然猜出了公式!!!

最后七道题走人了,最多的一支队过了九题.不知道能不能拿个几等奖.不过这次省赛的最后经验是同志依旧需努力..搞了半小时的C题最后题解也没听懂…DE题更是可怕到无人通过.

这个世界还是很大的.

算法的世界也是很大的.

C

环形墙壁,n块最多k色求涂法

赛后问了一下诗源,以及在队群里面讨论一下,对于10^10的数据量有log(n)的算法.

大概意思是枚举+容斥.

比如长度为4的 ABCD这种除4,ABAB除2,AAAA不用除.然后相加.

最后省赛67名收尾.同志仍需努力呐.

另外附上参赛前对0607年省赛题型算法的笔记:

来着郭嵩山 张子臻老师的 国际大学生程序设计竞赛例题解(五)

2006

字符串查重

set 和 map 底层用红黑树实现

字典树不区分大小写

更新的函数挺有意思的

void visit ( tree *p,char *s,int bj)//insert: bj = 1,delete bj = 0
{
char c = (*s) -'a';
if (p->node[c])p=p->node[c];
else {
if( !bj ) return;//insert
p->node[c] = new tree;
p=p->node[c];
}
if(s[1])visit(p,s+1,bj);
else
{
if(p->bj != bj)
ans += bj ? 1:-1;
p->bj = bj;
}
}




想起校赛双重hash..<<=4成longlong后map

重定向输入

freopen("message.in","r",stdin);
freopen("message.out","r",stdout);


不进位线段求和

自定义减法操作,sum[x,y] = sum[0,y] - sum[0,x]

求sum[0,x]开数组 c[i][j] 表示 [0,x] i 位出现j 的数字次数

闭包冲突

string map读入超时可以char*读入..然后转换成string

char* 处理
strstr(str,const char*) != 0;//not conclude
strcmp (char* , const char*) == 0;//same
file stream
filein.oef();


floyd 处理后判断冲突,二进制判断特别漂亮
&2


通配符查询

dp w[i][j] 代表待匹配串 前i位 能否匹配串的 前j位

0位数组越界处理
m[i]\[j] = ( !j ) ?(expression1):expression(2)


字符串结合第n大

cmp x+y

2007

二分图的完全最优匹配

二分

最长波动(一增一减)子序列

DP思路和LIS一致..

儿童节快乐

线段树��…

插入<

计数问题..找规律DP…(看怎么插入)

排序身高差不同

脑洞构造一前一后一前一后+证明

模拟统计Accept

任务安排问题,求最小late

搜索+剪枝

贪心优化:总是选择准备就绪且最后期限最小的任务

(二分图)的最长距离

转化为两个凸包旋转边界线

用余弦定理求点到直线距离

N个机械臂并行读取N-1条信息

机械臂之间不会交叉

两个指针向右扫描的方法在O(n)时间计算距离

枚举多余的机械臂,机械臂与对应记录只差做求和的预处理,从左向右累加,再从右向左一次,中间结果全部记录下来.a[i]表示前i个机械臂读取前i个记录的花费,b[i]表示i+1后机械臂读取第i个记录后的花费

m*n子矩阵中的不同元素

id化处理数据,cmp中排序id,元素序号..

枚举行,用最先出现的列来优化,每一次将原先的不同元素减一,优化列数不同元素+1

树+叶子环=>最优汉密尔顿圈

枚举圈经过root的情况

记忆化搜索

计算n个节点k个叶子树的数目

运用题目介绍的编码,发现一一对应关系

然后转化为用n-k种编码生成长度n-2的字符串

递推求解

另外组合数
c(i,j) = c(i-1,j-1) + c(i-1,j)


移动石头,先根的到败

题目写的像博弈,但是没有博弈性质

求和各自的深度..dfs

猴子分香蕉

每次取走y个剩下的整除(分成)x(堆),取走一堆.求第k小的解

逆推+BFS,为了使得搜索结果有序,维护一个最小堆

由于对n的单调性,用C个指针(为了后移)优化

路重建

dijkstra,将不需要重修的定义为0.

无向图中的简单路

管道种类多(15种…)

减少边数:删除二度顶点

用四位二进制表示四个方向连边数量

07校选拔

字符串查重

等腰直角三角形左顶点排序后分类讨论求面积并

有趣的是longlong输出,小数部分讨论输出

最大流

拆点

//寻找增广路径
int find()
{
int queue[maxn + 10], head, tail;
int x, loop;
fill(tag, tag + n ,0)
}




两个集合最小距离

DP

不会交叉匹配
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法