这名字诡异(然而就是这样)

  这次主要是yekehe和yu‘ao都来了,所以很开心的讨论(上了200)。

  但是,yu’ao dalao又AK了!(666666)

  不过总体难度也不高,主要是T3没思路。

  T1 二分或桶

  ·如果你不会这道题,出门右转找傅哥去。

  去年蒟蒻时期的噩梦啊。然而只是一道PJ的水题。

  二分洪水的高度(题目错了,数据是向上取整),然后判断是否可行。

  注意开long long(不开80)

  CODE

  1. #include<cstdio>
  2. using namespace std;
  3. typedef long long LL;
  4. const int N=;
  5. LL a[N][N],n,m,i,j,v,h,s;
  6. inline char get(void)
  7. {
  8. static char buf[], *p1 = buf, *p2 = buf;
  9. if (p1 == p2)
  10. {
  11. p2 = (p1 = buf) + fread(buf, , , stdin);
  12. if (p1 == p2) return EOF;
  13. }
  14. return *p1++;
  15. }
  16. inline void read(LL &x)
  17. {
  18. x = ; static char c;
  19. for (; !(c >= '' && c <= ''); c = get());
  20. for (; c >= '' && c <= ''; x = x * + c - '', c = get());
  21. }
  22. inline bool check(LL k)
  23. {
  24. long long res=;
  25. for (i=;i<=n;++i)
  26. for (j=;j<=m;++j)
  27. if (a[i][j]<=k)
  28. res+=k-a[i][j];
  29. return res<v;
  30. }
  31. int main()
  32. {
  33. freopen("water.in","r",stdin); freopen("water.out","w",stdout);
  34. read(n); read(m); read(v);
  35. for (i=;i<=n;++i)
  36. for (j=;j<=m;++j)
  37. read(a[i][j]);
  38. LL l=,r=v+;
  39. while (l<=r)
  40. {
  41. LL mid=l+r>>;
  42. if (check(mid)) h=mid+,l=mid+; else r=mid-;
  43. }
  44. for (i=;i<=n;++i)
  45. for (j=;j<=m;++j)
  46. if (a[i][j]<=h) s+=a[i][j];
  47. printf("%lld %lld",h,s);
  48. return ;
  49. }

  T2 前缀和+姜度大佬玄学算法。

  首先思路很好想,把墙的高度都减去一个x就转化成了一个找连续区间的和>=0的问题了。

  暴力:O(n^3); 前缀和优化:O(n^2); 单调栈上二分(裸二分会炸):O(n log n);

  这些,都过不了。

  然后由于姜度dalao暑假来HW给我们讲过了求最长的区间和>=k的算法,非常简洁且有效率(O(n));

  设一个数组mx[]表示后向前缀和最大值,当前答案为res,那么如果mx[i+res]>=s[i],则向后枚举答案一定增大。

  由于两个指针(i和res)一起增大,所以复杂度为O(n);

  CODE

  1. #include<cstdio>
  2. //#include<ctime>
  3. using namespace std;
  4. typedef long long LL;
  5. const LL N=;
  6. LL sum[N],a[N],mx[N],n,m,i,x,res;
  7. inline char get(void)
  8. {
  9. static char buf[], *p1 = buf, *p2 = buf;
  10. if (p1 == p2)
  11. {
  12. p2 = (p1 = buf) + fread(buf, , , stdin);
  13. if (p1 == p2) return EOF;
  14. }
  15. return *p1++;
  16. }
  17. inline void read(LL &x)
  18. {
  19. x = ; static char c;
  20. for (; !(c >= '' && c <= ''); c = get());
  21. for (; c >= '' && c <= ''; x = x * + c - '', c = get());
  22. }
  23. inline void write(LL x)
  24. {
  25. if (x/) write(x/);
  26. putchar(x%+'');
  27. }
  28. int main()
  29. {
  30. freopen("dam.in","r",stdin); freopen("dam.out","w",stdout);
  31. read(n); read(m);
  32. for (i=;i<=n;++i)
  33. read(a[i]);
  34. while (m--)
  35. {
  36. read(x);
  37. sum[]=;
  38. for (i=;i<=n;++i)
  39. sum[i]=sum[i-]+a[i]-x;
  40. mx[n]=sum[n];
  41. for (i=n-;i;--i)
  42. mx[i]=sum[i]>mx[i+]?sum[i]:mx[i+];
  43. res=;
  44. for (i=;i+res<=n;++i)
  45. while (mx[i+res]>=sum[i-]&&i+res<=n) ++res;
  46. write(res);
  47. putchar(' ');
  48. }
  49. //printf("\n%.2lf",(double)clock());
  50. return ;
  51. }

  T3 当时看到题目蒙蔽了,从来没坐过概率之类的问题。

  yu‘ao dalao打了很长(貌似)的递推,然后我看了标算才大彻大悟。

  这就是一道你知道概率公式记忆化搜索的题。

  把一个状态(m,a[])(m是剩下的天数,a[]是每个人剩下的体力)hash成一个不会重复的大整数。记搜即可。

  CODE

  1. #include<cstdio>
  2. #include<iostream>
  3. #include<cstring>
  4. using namespace std;
  5. const int N=,seed=,MAX_SIZE=;
  6. int a[N],n,m,i;
  7. double s[MAX_SIZE];
  8. bool f[MAX_SIZE];
  9. inline void read(int &x)
  10. {
  11. x=; char ch=getchar();
  12. while (ch<''||ch>'') ch=getchar();
  13. while (ch>=''&&ch<='') x=x*+ch-'',ch=getchar();
  14. }
  15. inline int hash(int m)
  16. {
  17. int res=m;
  18. for (int i=;i<n;++i)
  19. res=res*seed+a[i];
  20. return res;
  21. }
  22. inline double dfs(int m)
  23. {
  24. if (!m) return 1.0*(a[]>);
  25. if (f[hash(m)]) return s[hash(m)];
  26. f[hash(m)]=;
  27. double tot=0.0,t=0.0;
  28. for (int i=;i<=n;++i)
  29. if (a[i]>)
  30. {
  31. a[i]--; tot+=dfs(m-); a[i]++; t++;
  32. }
  33. if (t) return s[hash(m)]=tot/t; else return ;
  34. }
  35. int main()
  36. {
  37. freopen("hung.in","r",stdin); freopen("hung.out","w",stdout);
  38. read(n); read(m);
  39. for (i=;i<=n;++i)
  40. read(a[i]);
  41. for (i=;i<=n;++i)
  42. {
  43. swap(a[],a[i]);
  44. memset(f,,sizeof(f));
  45. printf("%.6lf\n",dfs(m));
  46. }
  47. return ;
  48. }

EZ 2017 01 07 t的更多相关文章

  1. 2017/01/07 学习笔记 jar包,maven

    ① 关于tar,jar,war文件 tar是通用的另一种打包格式,为了部署到服务器时方便. jar是java app server识别的java部署格式,其实是Zip文件,只是内部的文件有规范. wa ...

  2. 【web开发 | 移动APP开发】 Web 移动开发指南(2017.01.05更新)

    版本记录 - 版本1.0 创建文章(2016.12.30) - 版本1.1 更正了hybird相关知识:增加了参考文章(2017.01.05): + Web APP更正为响应式移动站点与页面,简称响应 ...

  3. http://www.cnblogs.com/zhaoyang/archive/2012/01/07/2315436.html

    http://www.cnblogs.com/zhaoyang/archive/2012/01/07/2315436.html

  4. Mysql Innodb 性能参数设置 https://www.rathishkumar.in/2017/01/how-to-allocate-innodb-buffer-pool-size-in-mysql.html

    参考原文: https://www.rathishkumar.in/2017/01/how-to-allocate-innodb-buffer-pool-size-in-mysql.html 查看系统 ...

  5. java编程如何实现2017-01-16 22:28:26.0这样的时间数据,转换成2017:01:16:22:28:26这样的时间数据

    不多说,直接上干货! timereplace.java package zhouls.bigdata.DataFeatureSelection.util; /* * 这个程序,是用来做补充的 */ p ...

  6. Java实现 LeetCode 面试题 01.07. 旋转矩阵(按照xy轴转+翻转)

    面试题 01.07. 旋转矩阵 给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节.请你设计一种算法,将图像旋转 90 度. 不占用额外内存空间能否做到? 示例 1: 给定 mat ...

  7. Cheatsheet: 2017 07.01 ~ 07.31

    Other 8 Key Application Performance Metrics & How to Measure Them The Code Review: The Most Impo ...

  8. [2017.02.07] Lua入门学习记录

    #!/home/auss/Projects/Qt/annotated/lua -- 这是第一次系统学习Lua语言 --[[ 参考资料: 1. [Lua简明教程](http://coolshell.cn ...

  9. TIOBE.2017.01最新编程语言排行榜

    Jan 2017     Jan 2016     Change     Programming Language     Ratings     Change1    1        Java   ...

随机推荐

  1. Flutter开发中的几个常用函数

    几个Flutter开发中的常用函数 /** 返回当前时间戳 */ static int currentTimeMillis() { return new DateTime.now().millisec ...

  2. MVC与单元测试实践之健身网站(一)-项目概述

    前不久刚刚通过租房网站的开发学习了MVC,并随后学习了单元测试相关的基础,现在开始健身网站的开发,该项目将结合MVC与单元测试,在开发实践过程中,趁热打铁,巩固并运用之前的内容. 一 健身网站功能描述 ...

  3. JQuery判断数组中是否包含某个字符串

    var arry = [ "C#", "html", "css", "JavaScript" ]; var result ...

  4. Http 缓存机制

    HTTP 缓存体系 首先我将 Http 缓存体系分为以下三个部分: HTTP/ OK Cache-Control: no-cache Content-Type: image/png Last-Modi ...

  5. [Synology] [群晖] 关闭被占用的文件

    1. Control Panel: Control Panel > Terminal & SNMP Enable SSH service 2. SSH into Synology 3. ...

  6. TCP是如何实现三次握手的?

    什么是三次握手 TCP是网络传输层的协议,提供面向连接的可靠的字节流服务,要通信得先建立连接 所谓三次握手就是指,建立一个TCP连接时,需要CLient与Server发送三个包,确认连接的建立 这一过 ...

  7. MySql服务的启动和停止

    1.启动:net start mysql; 2.停止:net stop mysql.

  8. quarz时间配置

    Cron表达式的格式:秒 分 时 日 月 周 年(可选). 字段名                 允许的值                            允许的特殊字符     秒     ...

  9. 调用webservice 的时候没法输入参数

    在web.config的<system.web></system.web>中间加入如下配置节内容<webServices> <protocols> &l ...

  10. C# 利用VS自带的WSDL工具生成WebService服务类(转载)

    WebService有两种使用方式,一种是直接通过添加服务引用,另一种则是通过WSDL生成. 添加服务引用大家基本都用过,这里就不讲解了. 那么,既然有直接引用的方式,为什么还要通过WSDL生成呢? ...