题源:感谢 by hzwer

水灾(sliker.cpp/c/pas) 1000MS  64MB

大雨应经下了几天雨,却还是没有停的样子。土豪CCY刚从外地赚完1e元回来,知道不久除了自己别墅,其他的地方都将会被洪水淹没。

CCY所在的城市可以用一个N*M(N,M<=50)的地图表示,地图上有五种符号:“. * X D S”。其中“X”表示石头,水和人都不能从上面经过。“.”表示平原,CCY和洪水都可以经过。“*”表示洪水开始地方(可能有多个地方开始发生洪水)。“D”表示CCY的别墅。“S”表示CCY现在的位置。

CCY每分钟可以向相邻位置移动,而洪水将会在CCY移动之后把相邻的没有的土地淹没(从已淹没的土地)。

求CCY回到别墅的最少时间。如果聪哥回不了家,就很可能会被淹死,那么他就要膜拜黄金大神涨RP来呼叫直升飞机,所以输出“ORZ hzwer!!!”。

输入文件 sliker.in

输出文件 sliker.out

Input

3 3

D.*

.S.

Output

3

Input

3 3

D.*
...

..S

Output

ORZ hzwer!!!

Input

3 6

D...*.

.X.X..

....S.

Output

6

最短路问题,而且也是经典的BFS题目,但是增加了一个限制”洪水“,而洪水的影响则是在t时刻之后淹没位置(x,y),而我要路过这个位置,则要在t时刻之前路过;

那么可以这样解决,先BFS求出洪水淹没(x,y)所需要的时间t,再BFS求我能否从起始点抵达城堡,对于每抵达的一个点(x,y)要符合几个条件:

1.不能是石头”X“

2.不能超过边界,即1<=x<=n&&1<=y<=m

3.当前时刻这地方还没被洪水淹没,即我抵达的时间T<=t(洪水淹没(x,y)的时间)

那么这题就很愉快的解决了,以下是代码:

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<string>
  4. #include<cstring>
  5. #include<cstdlib>
  6. #include<sstream>
  7. #include<fstream>
  8. #include<vector>
  9. #include<list>
  10. #include<deque>
  11. #include<stack>
  12. #include<queue>
  13. #include<map>
  14. #include<set>
  15. #include<cmath>
  16. #include<utility>
  17. #include<numeric>
  18. #include<iterator>
  19. #include<algorithm>
  20. #include<functional>
  21. #include<ctime>
  22. #include<cassert>
  23. using std::cin;
  24. using std::cout;
  25. using std::endl;
  26. typedef long long ll;
  27. typedef unsigned long long ull;
  28. typedef std::pair<int,int> P;
  29. #define FOR(i,init,len) for(int i=(init);i<(len);++i)
  30. #define For(i,init,len) for(int i=(init);i<=(len);++i)
  31. #define fi first
  32. #define se second
  33. #define pb push_back
  34. #define is insert
  35. namespace IO {
  36. inline char getchar() {
  37. static const int BUFSIZE=;
  38. static char buf[BUFSIZE],*begin,*end;
  39. if(begin==end) {
  40. begin=buf;
  41. end=buf+fread(buf,,BUFSIZE,stdin);
  42. if(begin==end) return -;
  43. }
  44. return *begin++;
  45. }
  46. }
  47. inline void read(int &in) {
  48. int c,symbol=;
  49. while(isspace(c=IO::getchar()));
  50. if(c=='-') { in=;symbol=-; }
  51. else in=c-'';
  52. while(isdigit(c=IO::getchar())) { in*=;in+=c-''; }
  53. in*=symbol;
  54. }
  55. inline int read() { static int x;read(x);return x; }
  56. ll gcd(ll a,ll b) { return b?gcd(b,a%b):a; }
  57. ll lcm(ll a,ll b) { return a/gcd(a,b)*b; }
  58. #define PA(name,init,len) cout<<#name"["<<(len-init)<<"]=";FOR(_,init,len) cout<<name[_]<<" \n"[_==(len-1)];
  59. #define Pa(name,init,len) cout<<#name"["<<(len-init+1)<<"]=";For(_,init,len) cout<<name[_]<<" \n"[_==(len)];
  60. #define PV(name) cout<<#name"="<<name<<'\n';
  61.  
  62. const int maxn=;
  63. int n,m;
  64. int dist[maxn][maxn];
  65. bool vis[maxn][maxn];
  66. char s[maxn][maxn];
  67.  
  68. const int dx[]={,,,-};
  69. const int dy[]={,,-,};
  70.  
  71. struct Node{
  72. int x,y,time;
  73. Node(int x=,int y=,int time=):x(x),y(y),time(time){}
  74. };
  75.  
  76. //主要检查坐标是否越界和是否来过
  77. inline bool check(int x,int y){return x>=&&x<=n&&y>=&&y<=m&&!vis[x][y];}
  78.  
  79. //bfs求洪水在什么时候淹没(x,y),那么我必须在洪水淹没之前抵达这里,否则我将不能抵达这里
  80. void flood_bfs(){
  81. std::queue<Node> q;
  82. For(i,,n) For(j,,m) if(s[i][j]=='*') q.push(Node(i,j,)),vis[i][j]=true;
  83. memset(dist,0x3f,sizeof(dist));//初始距离赋值为最大值,按字节赋值0x3f,结果为dist[i][j]=0x3f3f3f3f=1061109567
  84. while(!q.empty()){
  85. Node t=q.front();q.pop();
  86. dist[t.x][t.y]=t.time;
  87. FOR(i,,){
  88. int x=t.x+dx[i],y=t.y+dy[i];
  89. if(check(x,y)&&s[x][y]!='X'&&s[x][y]!='D') q.push(Node(x,y,t.time+)),vis[x][y]=true;
  90. }
  91. }
  92. }
  93.  
  94. //bfs求我抵达城堡的最短时间,如果不能抵达,返回-1
  95. int bfs(){
  96. std::queue<Node> q;
  97. memset(vis,,sizeof(vis));
  98. For(i,,n) For(j,,m) if(s[i][j]=='S') q.push(Node(i,j,)),vis[i][j]=true;
  99. while(!q.empty()){
  100. Node t=q.front();q.pop();
  101. if(s[t.x][t.y]=='D') return t.time;
  102. FOR(i,,){
  103. int x=t.x+dx[i],y=t.y+dy[i];
  104. if(check(x,y)&&s[x][y]!='X'&&t.time+<dist[x][y]) q.push(Node(x,y,t.time+)),vis[x][y]=true;
  105. }
  106. }
  107. return -;
  108. }
  109.  
  110. int main() {
  111. #ifdef MengLan
  112. int Beginning=clock();
  113. //freopen("in","r",stdin);
  114. //freopen("out","w",stdout);
  115. #endif // MengLan
  116.  
  117. scanf("%d%d",&n,&m);
  118. For(i,,n) scanf("%s",s[i]+);
  119. flood_bfs();
  120. int ans=bfs();
  121. if(ans==-) puts("ORZ hzwer!!!");
  122. else printf("%d\n",ans);
  123.  
  124. #ifdef MengLan
  125. printf("Time: %d\n",clock()-Beginning);
  126. system("pause");
  127. #endif // MengLan
  128. return ;
  129. }

某种数列问题  (jx.cpp/c/pas) 1000MS 256MB

众所周知,chenzeyu97有无数的妹子(阿掉!>_<),而且他还有很多恶趣味的问题,继上次纠结于一排妹子的排法以后,今天他有非(chi)常(bao)认(cheng)真(zhe)去研究一个奇怪的问题。有一堆他的妹子站成一排,然后对于每个妹子有一个美丽度,当然美丽度越大越好,chenzeyu97妹子很多,但是质量上不容乐观,经常出现很多美丽度为负数的妹子(喜闻乐见),chenzeyu97希望从一排妹子里找出3队连续的妹子,使她们的美丽度和最大。注意,一个妹子不能被编入多个队伍而且一定要拿出三队,不然czy会闲着没事做~。

简单滴说就是:

给定一个数列,从中找到3个无交集的连续子数列使其和最大。

【输入文件】

第一行一个数n,表示数列长度。

接下来有n行,每行一个数,第i行为第i个数。

【输出文件】

仅有一个数,表示最大和。

【样例输入】 jx.in

10

-1

2

3

-4

0

1

-6

-1

1

-2

【样例输出】 jx.out

7

【样例说明】

第一队妹子取2,3。

第二队妹子取0,1。

第三队妹子取1。

【数据范围】

请大家放心,虽然chenzeyu97妹子无数,但是这次他叫来的个数n是有限的。=v=

对于30%的数据,妹子数不大于200。

对于60%的数据,妹子数不大于2000。

对于100%的数据,妹子数1000000。

而且,由于chenzeyu97没有CCR那样的影响力,所以他的妹子选完的最大美丽度和不超过maxlongint。(注:CCR随便选就爆long long,因为他是把妹狂魔=V=)。

两种解法???第一种,求最大连续和,

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<string>
  4. #include<cstring>
  5. #include<cstdlib>
  6. #include<sstream>
  7. #include<fstream>
  8. #include<vector>
  9. #include<list>
  10. #include<deque>
  11. #include<stack>
  12. #include<queue>
  13. #include<map>
  14. #include<set>
  15. #include<cmath>
  16. #include<utility>
  17. #include<numeric>
  18. #include<iterator>
  19. #include<algorithm>
  20. #include<functional>
  21. #include<ctime>
  22. #include<cassert>
  23. using std::cin;
  24. using std::cout;
  25. using std::endl;
  26. typedef long long ll;
  27. typedef unsigned long long ull;
  28. typedef std::pair<int,int> P;
  29. #define FOR(i,init,len) for(int i=(init);i<(len);++i)
  30. #define For(i,init,len) for(int i=(init);i<=(len);++i)
  31. #define fi first
  32. #define se second
  33. #define pb push_back
  34. #define is insert
  35. namespace IO {
  36. inline char getchar() {
  37. static const int BUFSIZE=;
  38. static char buf[BUFSIZE],*begin,*end;
  39. if(begin==end) {
  40. begin=buf;
  41. end=buf+fread(buf,,BUFSIZE,stdin);
  42. if(begin==end) return -;
  43. }
  44. return *begin++;
  45. }
  46. }
  47. inline void read(int &in) {
  48. int c,symbol=;
  49. while(isspace(c=IO::getchar()));
  50. if(c=='-') { in=;symbol=-; }
  51. else in=c-'';
  52. while(isdigit(c=IO::getchar())) { in*=;in+=c-''; }
  53. in*=symbol;
  54. }
  55. inline int read() { static int x;read(x);return x; }
  56. ll gcd(ll a,ll b) { return b?gcd(b,a%b):a; }
  57. ll lcm(ll a,ll b) { return a/gcd(a,b)*b; }
  58. #define PA(name,init,len) cout<<#name"["<<(len-init)<<"]=";FOR(_,init,len) cout<<name[_]<<" \n"[_==(len-1)];
  59. #define Pa(name,init,len) cout<<#name"["<<(len-init+1)<<"]=";For(_,init,len) cout<<name[_]<<" \n"[_==(len)];
  60. #define PV(name) cout<<#name"="<<name<<'\n';
  61.  
  62. const int maxn=1e6+;
  63. int in[maxn];
  64. ll d[][maxn][];
  65. int n;
  66.  
  67. int main() {
  68. #ifdef MengLan
  69. int Beginning=clock();
  70. //freopen("in","r",stdin);
  71. //freopen("out","w",stdout);
  72. #endif // MengLan
  73.  
  74. scanf("%d",&n);
  75. For(i,,n) scanf("%d",in+i);
  76. For(i,,) For(j,,n){
  77. d[i][j][]=std::max({d[i-][j-][],d[i-][j-][],d[i][j-][]});
  78. d[i][j][]=std::max(d[i][j-][],d[i][j-][])+in[j];
  79. //printf("d[%d][%d][0]=%lld d[%d][%d][1]=%lld\n",i,j,d[i][j][0],i,j,d[i][j][1]);
  80. }
  81. ll ans=-1e18;
  82. For(i,,n) ans=std::max(ans,d[][i][]);
  83. printf("%lld\n",ans);
  84.  
  85. #ifdef MengLan
  86. printf("Time: %d\n",clock()-Beginning);
  87. system("pause");
  88. #endif // MengLan
  89. return ;
  90. }

Round #3的更多相关文章

  1. SQL Server 随机数,随机区间,随机抽取数据rand(),floor(),ceiling(),round(),newid()函数等

    在查询分析器中执行:select rand(),可以看到结果会是类似于这样的随机小数:0.36361513486289558,像这样的小数在实际应用中用得不多,一般要取随机数都会取随机整数.那就看下面 ...

  2. SQL中Round(),Floor(),Ceiling()函数的浅析

    项目中的一个功能模块上用到了标量值函数,函数中又有ceiling()函数的用法,自己找了一些资料,对SQL中这几个函数做一个简单的记录,方便自己学习.有不足之处欢迎拍砖补充 1.round()函数遵循 ...

  3. oracle的round函数和trunc函数

    --Oracle trunc()函数的用法/**************日期********************/1.select trunc(sysdate) from dual --2013- ...

  4. Codeforces Round #366 (Div. 2) ABC

    Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...

  5. Codeforces Round #354 (Div. 2) ABCD

    Codeforces Round #354 (Div. 2) Problems     # Name     A Nicholas and Permutation standard input/out ...

  6. 【BZOJ1662】[Usaco2006 Nov]Round Numbers 圆环数 数位DP

    [BZOJ1662][Usaco2006 Nov]Round Numbers 圆环数 Description 正如你所知,奶牛们没有手指以至于不能玩"石头剪刀布"来任意地决定例如谁 ...

  7. Codeforces Round #368 (Div. 2)

    直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...

  8. mathlab之floor,ceil,round,int以及fix函数

    建议自己动手敲敲,网上很多人自己都没搞清楚然后好多错的.毕竟自己亲眼看到结果才有说服力. 以下是我亲眼见到的结果. 1.double floor(double)函数 floor()函数是常用的取整函数 ...

  9. SQL SERVER四舍五入你除了用ROUND还有其他方法吗?

    引言 今天和测试沟通一个百分比计算方式时遇到一个问题, 我在存储过程里用到了强转CAST(32.678 AS DECIMAL(5,1))  我认为该方式只会保留一位小数,我给测试的回复是我并没有用到四 ...

  10. JavaScript的几种Math函数,random(),ceil(),round(),floor()

    1.Math.random():返回 0 ~ 1 之间的随机数.2.Math.ceil():返回值:返回大于或等于x,并且与之最接近的整数(如果x是正数,则把小数"入":如果x是负 ...

随机推荐

  1. hadoop启动 datanode的live node为0

    hadoop启动 datanode的live node为0 浏览器访问主节点50070端口,发现 Data Node 的 Live Node 为 0 查看子节点的日志 看到 可能是无法访问到主节点的9 ...

  2. find 命令局部小结之 xtime

    大家在使用find命令的时候往往会使用它的 -name  或者 -xtime,在这里就说下他的xtime. find / -mtime +7 .find / -mtime -7.find / -mti ...

  3. 基于Spring Security OAuth2搭建的Spring Cloud 认证中心

    Github传送门:https://github.com/13babybear/bounter-springcloud 实现功能有: 整合JWT 刷新Token 自定义客户端储存 自定义用户储存 资源 ...

  4. 阿里云服务器配置https(port443)后客户端 svn check out 失效解决办法

    1. 客户端环境 1. 操作系统:Windows 7 2. svn客户端:TortoiseSVN 2. 服务端环境 1. 云服务平台:阿里云 2. 操作系统:Windows Server 2008 R ...

  5. E - Coin Change UVA - 674 &&(一些记录路径的方法)

    这一道题并不难,我们只需要将dp数组先清空,再给dp[0]=1,之后就按照完全背包的模板写 主要是我们要证明着一种方法不会出现把(1+3+4)(1+4+3)当作两种方法,这一点如果自己写过背包的那个表 ...

  6. iOS端临近封包时要做哪些事情?

    iOS封包前的注意事项: 0.功能测试,打点测试都已OK 1.创建case,使用master执行此轮case,修改版本号 2.建议使用各个系统的机型,如8,9,10,11,12, iPad等 3.ma ...

  7. 直流滤波器 verilog

    // dc filter- y(n) = c*x(n) + (1-c)*y(n-1) `timescale 1ps/1ps module ad_dcfilter #( // data path dis ...

  8. Linux小知识收集(不断更新)

    一.说明 以下知识点都来自网络收集,只是给自己记录以免下次同样的问题的时候会忘记,如果知道出处,我都会进行标注,如果侵权的话,请邮件通知我,我会及时删除的 二.知识点 1.将centos的源修改为阿里 ...

  9. 烽火2640路由器命令行手册-12-IBM网络配置命令

    IBM网络配置命令 目  录 第1章 DLSW配置命令... 1 1.1 DLSW配置命令... 1 1.1.1 dlsw local-peer 1 1.1.2 dlsw remote-peer 3 ...

  10. 简单使用sp_executesql 参数化

    declare @totalCount1 int output declare @id1 varchar(10) declare @strsql1 nvarchar(max)=N'' declare ...