GDCPC2016 参赛总结

本文是作者参加GDCPC2016算法比赛的总结,分享了比赛经历和解题策略。团队在短时间内解决四道题目,包括线段树、四边形共圆判断、异或数组和博弈问题。通过比赛,作者认识到算法世界的广阔和自身需要不断努力提升。
摘要由CSDN通过智能技术生成

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

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

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

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

A

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

K

队长敲A的时候翻了翻题目,发现K才是真正的水题..
f[0] = a,f[1] = b,f[n] = f[n-1] xor f[n-2]给出a,b,n,求f[n]
立马转战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条信息
    1. 机械臂之间不会交叉
    2. 两个指针向右扫描的方法在O(n)时间计算距离
    3. 枚举多余的机械臂,机械臂与对应记录只差做求和的预处理,从左向右累加,再从右向左一次,中间结果全部记录下来.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

    • 不会交叉匹配
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值