题目链接:https://vjudge.net/contest/155219#overview。

  A题,用全排列来找出比当前这个数字字典序还大的排列有几个,然后前缀和dp即可。据说可以康拓展开来快速找出前面需要实现的要求。

  B题,水题。

  C题,感觉数据比较水。做法是dsu+lca,但是为了实现lca树的结构不被破坏,dsu::find()不能压缩路径。然后线性找lca没T也是有点神奇。

  D题,dfs即可。

  E题,dp[i][j][k],表示到了(i,j)并且已经吃了k个2,最多吃了几个3的状态。最后遍历一下dp[n][m][...]找出答案即可。

  F题,水题。

  G题,二分答案,然后跑dij即可。很久没写dij,刚开始竟然忘了优先队列要写一个greater..

  H题,不会= =。

  I题,水题。

  J题,刚开始想了一个比较麻烦的方法,不需要考虑dfs的时候当前步是谁的做法,然后WA了。然后加上就可以了,还好写很多。不用记忆化搜索也能够过。

  K题,dp[i][j]表示计算到i位,%p答案是j的种类数。然后滚动数组一下再一位一位dp即可。之所以dp[pre][0]每次都需要先+1是因为,之前是空串也算是一个0,换言之,只有当前这位数字%p是0也是可以的。

  L题,这个博弈论构造起来好麻烦(虽然最终代码很简单)。。首先注意到随着个数的增加,一堆是必胜堆还是必败堆是交替变化的。必胜态考虑完了要考虑必败态的话,必败态的L肯定是上一个必胜态的R+1。然后因为必败态的任意一种选择都是必胜态,因此必败态的最大堆是上一个必胜态的R,然后其他堆都是1,如此不能再多了(因为再多一个,放在最大堆上,最大堆上就变成了必败态,这和必败态的定义不符合),因此这个必败态的R是是上一个必胜态的R+(n-1)。那么再考虑下一个必胜态,必胜态的定义是只要有一种方法能到达必败态即可,因此最大堆是上一个必败态的R,其他的先不妨设置为1,然后同样的考虑再增加一个,因为当前选择者肯定不会傻到放到最大堆上(这样的话最大堆就变成必胜态了),那么只能放到其他堆,这样的状况一直会持续到其他n-1个堆都是n-1(不能再多了,因为n是必胜态),这是临界值,所以这个必胜态的R值是上一个必败态的R再加上(n-1)*(n-1)。如此交替即可,那么给定一个x一定能够知道这是必胜堆还是必败堆。最后对于先手者,只要有一堆是必胜的,选择它即可。

  M题,比赛的时候搞了半天,最后因为写起来好麻烦就放弃了。看了一下仓鼠的代码是dp的,一下子简单许多。那么就直接放一下他的代码好了(他的叉乘判断顺逆时针方法习惯和我的有点不同,但本质是一样的):

 1 #include <bits/stdc++.h>
 2 #define x first
 3 #define y second
 4 using namespace std;
 5 typedef pair<int,int> pii;
 6 const int N = 1000 + 5;
 7 const double inf = 1e18;
 8
 9 pii p[N];
10 int st[N], tot;
11 int n;
12 double dp[N];
13
14 // k->i, k->j
15 bool cross(int i,int j,int k)
16 {
17     pii pa = pii(p[i].x-p[k].x, p[i].y-p[k].y);
18     pii pb = pii(p[j].x-p[k].x, p[j].y-p[k].y);
19     return 1LL*pa.x*pb.y - 1LL*pb.x*pa.y > 0;
20 }
21 double dis(int i,int j)
22 {
23     double xx = p[i].x - p[j].x;
24     double yy = p[i].y - p[j].y;
25     return sqrt(xx*xx + yy*yy);
26 }
27
28 int main()
29 {
30     int T;
31     cin >> T;
32     while(T--)
33     {
34         scanf("%d",&n);
35         for(int i=1;i<=n;i++) scanf("%d%d",&p[i].x,&p[i].y);
36         dp[0] = 0;
37         dp[1] = inf;
38         for(int i=2;i<=n;i++)
39         {
40             dp[i] = inf;
41             tot = 0;
42
43             for(int j=i;j>0;j--)
44             {
45                 // 如果储备点大于两个并且存在凹进去的部分,去掉那部分
46                 while(tot > 1 && cross(j,st[tot-1],st[tot-2])) tot--;
47                 // 如果只有一个储备点,那么是可以直接更新答案的,要注意的是,中间的线段是可以选择去掉的。
48                 // 包含第一个点和最后一个点的段是不能被去掉的,所以dp[1]=inf,且dis(i,j)必须存在。
49                 if(tot == 1) dp[i] = min(dp[i], min(dp[j-1], dp[j]) + dis(i,j));
50                 st[tot++] = j;
51             }
52         }
53         printf("%.6f\n",dp[n]);
54     }
55     return 0;
56 }

M题

转载于:https://www.cnblogs.com/zzyDS/p/6622191.html

Egyptian Collegiate Programming Contest (ECPC 2015)相关推荐

  1. 2015 HIAST Collegiate Programming Contest J

    Polygons Intersection 题意:给2个凸多边形,求相交面积 思路:不会,套板子就是了 AC代码: #include "iostream" #include &qu ...

  2. 2015 German Collegiate Programming Contest (GCPC 15)

    2015 German Collegiate Programming Contest (GCPC 15) B. Bounty Hunter II 给定一张DAG,求一种方案:用最少的路径将所有点覆盖. ...

  3. 2015 ACM Arabella Collegiate Programming Contest(F题)

    F. Palindrome [ Color: Pink ] A string is palindrome if it can be read the same way in either direct ...

  4. (寒假开黑gym)2017-2018 ACM-ICPC German Collegiate Programming Contest (GCPC 2017)

    layout: post title: (寒假开黑gym)2017-2018 ACM-ICPC German Collegiate Programming Contest (GCPC 2017) au ...

  5. 2018 German Collegiate Programming Contest (GCPC 18)

    2018 German Collegiate Programming Contest (GCPC 18) Attack on Alpha-Zet 建树,求lca 代码: #include <al ...

  6. 2017-2018 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2017)

    D.Distinctive Character 看到样例,第一个反应贪心.先写了个按这一位1和0的数目多少,确定0还是1的东西.感觉不够真,又写了个尽量加到相似的比较小的串上的贪心.在和前边的那个组合 ...

  7. 2016 China Collegiate Programming Contest Final

    2016 China Collegiate Programming Contest Final Table of Contents 2016 China Collegiate Programming ...

  8. 【The 13th Chinese Northeast Collegiate Programming Contest】I. Temperature Survey

    题目描述 [题目链接](https://codeforces.com/gym/102220/problem/I) 给定长度为 $n$ 的 $a$ 序列,保证 $a_n \le n$,求有多少个长度为 ...

  9. (寒假开黑gym)2018 ACM-ICPC, Syrian Collegiate Programming Contest

    layout: post title: (寒假开黑gym)2018 ACM-ICPC, Syrian Collegiate Programming Contest author: "luow ...

  10. (寒假开黑gym)2018 ACM-ICPC, Syrian Collegiate Programming Contest(爽题)

    layout: post title: (寒假开黑gym)2018 ACM-ICPC, Syrian Collegiate Programming Contest(爽题) author: " ...

最新文章

  1. 融合变形三维插件想法
  2. SQL2008 收缩日志和数据脚本
  3. 音视频出海,如何乘风破浪?
  4. linux系统如何打开python_手把手教你在Linux系统下使用Python虚拟环境
  5. mysql binlog日志查看及解码
  6. mysql文件类型_MyCat教程:实现MySql主从复制
  7. ios 裁剪圆形头像_iOS开发之裁剪圆形头像
  8. java reducebykey_Spark入门(五)--Spark的reduce和reduceByKey
  9. arm-arago-linux-gnueabi 下载,arm-arago-linux-gnueabi问题
  10. java 容易犯错_Java中容易犯错的题
  11. 以太坊2.0合约余额新增8768 ETH
  12. 异速联客户端未获取到服务器信息,异速联客户端登陆服务器地址
  13. 图像特征提取(二)——HOG特征
  14. Spark视频王家林大神 第7课: Spark机器学习内幕剖析
  15. Shim Polifill区别
  16. 看板(Kanban)方法简介
  17. 计算机平面设计中汉字的使用艺术
  18. android 播放滴一声
  19. 计算机组成原理概念学习DAY3——内部存储器
  20. android集成语音功能

热门文章

  1. 学习如何读论文的一些磨刀不误砍柴工
  2. Tab表格thead头部固定(demo)
  3. Hadoop HA架构
  4. android netcfg 源码分析
  5. kinectfusion解析_KinectFusion 介绍
  6. QQ浏览器 不支持html5,浏览器常见问题_浏览器高级功能_浏览器在线帮助-QQ浏览器官网...
  7. 小辩《降薪求职,到底该不该?》
  8. 2017年江苏省高等数学竞赛试题解答手稿
  9. 关于可见光摄像机与机器视觉的科普
  10. 使用 Python 爬取网页数据