蛋疼啊,本次只做出了一道题目。。。渣爆了。。。

妈蛋,,卡题之夜。。比赛结果是1道题,比赛完哗啦哗啦出4道题。。

A acdream1191 Dragon Maze

题意: 给一个迷宫,给出入口坐标和出口坐标,要求从入口到出口的步数尽可能少,如果有多种方案,则要求获得的分数尽可能多,获得的分数为经过的方格的数字之和

思路: bfs求最小步数,每走一步更新一下走到这个格子的最大权值

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. typedef pair<int,int> pii;
  5. const int INF = 1e9;
  6. const double eps = 1e-;
  7. const int N = ;
  8. int cas = ;
  9.  
  10. const int dx[] = {,,-,};
  11. const int dy[] = {-,,,};
  12.  
  13. int g[N][N],w[N][N];
  14. int dep[N][N],exitdep;
  15. bool vis[N][N];
  16. int n,m;
  17. int enx,eny,exx,exy;
  18. int ans;
  19.  
  20. inline bool inside(int x,int y)
  21. {
  22. return x>= && x<n && y>= && y<m;
  23. }
  24.  
  25. void bfs()
  26. {
  27. exitdep = INF;
  28. ans = ;
  29. memset(vis,,sizeof(vis));
  30. memset(w,,sizeof(w));
  31. queue<pii> que;
  32. vis[enx][eny]=;
  33. que.push(make_pair(enx,eny));
  34. dep[enx][eny]=;
  35. w[enx][eny]=g[enx][eny];
  36. while(!que.empty())
  37. {
  38. int x = que.front().first;
  39. int y = que.front().second;
  40. que.pop();
  41. if(dep[x][y]>exitdep) continue;
  42. if(x==exx && y==exy)
  43. {
  44. //ans = max(ans,w[x][y]);
  45. exitdep = dep[x][y];
  46. }
  47. for(int i=;i<;i++)
  48. {
  49. int nx = x+dx[i];
  50. int ny = y+dy[i];
  51. if(!vis[nx][ny] || dep[nx][ny]==dep[x][y]+)
  52. w[nx][ny]=max(w[nx][ny],w[x][y]+g[nx][ny]);
  53. if(vis[nx][ny] || g[nx][ny]==- || !inside(nx,ny)) continue;
  54. vis[nx][ny]=;
  55. dep[nx][ny]=dep[x][y]+;
  56. que.push(make_pair(nx,ny));
  57. }
  58. }
  59. }
  60.  
  61. void run()
  62. {
  63. scanf("%d%d",&n,&m);
  64. int i,j;
  65. scanf("%d%d%d%d",&enx,&eny,&exx,&exy);
  66. for(i=;i<n;i++)
  67. for(j=;j<m;j++)
  68. scanf("%d",&g[i][j]);
  69. bfs();
  70. printf("Case #%d: ",cas++);
  71. if(exitdep==INF) puts("Mission Impossible.");
  72. else printf("%d\n",w[exx][exy]);
  73. }
  74.  
  75. int main()
  76. {
  77. #ifdef LOCAL
  78. freopen("case.txt","r",stdin);
  79. #endif
  80. int _;
  81. scanf("%d",&_);
  82. while(_--)
  83. run();
  84. return ;
  85. }

B acdream1207 qj的寻找爱情之旅

题意:有一个数量为n的序列,给出第一项,求第n项最小的时候是多少,要求满足

① H[i] = (H[i−1] + H[i+1])/2 − 1, 其中 1 < i < N

②   Hi ≥ 0

思路: 容易推出 H[i] = 2*H[i-1] - H[i-2] + 2  由于H[1] 题目给出,所以只要知道H[2]就可以一个个推到H[n],我开始的时候暴力了一下,发现规律,当H[2]小的时候,后面会有某一个数不满足Hi>=0的条件,当H[2]大于某个界限的时候,就会满足Hi>=0而且H[2]越大H[n]就越大,所以只要当H[2]=界限的时候H[n]就是所求最小值 , 然后就容易想到二分H[2]

坑点: 18行那里,如果我写成h[i]<-eps就wa,写成h[i]<0就AC了,浮点数一直很蛋疼啊。。 以后涉及浮点的话就多尝试一下吧。。

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. typedef pair<int,int> pii;
  5. const int INF = 1e9;
  6. const double eps = 1e-;
  7. const int N = ;
  8. int cas = ;
  9.  
  10. double h[N],ans;
  11. int n;
  12.  
  13. bool solve()
  14. {
  15. for(int i=;i<=n;i++)
  16. {
  17. h[i]=*h[i-]-h[i-]+;
  18. if(h[i]<)
  19. return ;
  20. }
  21. return ;
  22. }
  23.  
  24. void bs()
  25. {
  26. double l,r;
  27. l=0.0;
  28. r=h[];
  29. while(r-l>eps)
  30. {
  31. h[] = (l+r)/2.0;
  32. if(solve())
  33. {
  34. r=h[];
  35. ans = min(ans,h[n]);
  36. }
  37. else
  38. l=h[];
  39. }
  40. }
  41.  
  42. int main()
  43. {
  44. #ifdef LOCAL
  45. // freopen("case.txt","r",stdin);
  46. #endif
  47. cin>>n>>h[];
  48. ans = 2e9;
  49. bs();
  50. printf("%.2lf\n",ans);
  51. return ;
  52. }

C acdream1208 qj的奇怪宝具

题意:有一串环形柱子,每个柱子有两个值,左边和右边两个值,而且相邻的两个柱子,前面一个柱子的右值是后面一个珠子的左值,两个珠子聚合的时候会获得能量,获得的能力如下计算:设前一个珠子的左值为a,右值(也是后一个珠子的左值)为b,后一个珠子的右值为c,则这两个聚合后获得能量为a*b*c。求能获得的最大能量。

思路:典型的区间dp,矩阵连乘模型,不过这里是环状。解决方法也不难想:把链子复制一份到后面,求一次区间dp,然后答案就是dp[i][i+n-1], 1<=i<=n中的最大值

坑点:OJ问题,如果用多case输入模式就wa,单case就AC

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. typedef pair<int,int> pii;
  5. const int INF = 1e9;
  6. const double eps = 1e-;
  7. const int N = ;
  8. int cas = ;
  9.  
  10. int dp[N][N];
  11. int ans;
  12. int a[N],n;
  13.  
  14. void next()
  15. {
  16. int i;
  17. int t=a[];
  18. for(i=;i<n;i++)
  19. a[i]=a[i+];
  20. a[n]=t;
  21. a[n+]=a[];
  22. }
  23.  
  24. void get_dp()
  25. {
  26. memset(dp,,sizeof(dp));
  27. for(int i=;i+<=*n+;i++)
  28. dp[i][i+]=a[i]*a[i+]*a[i+];
  29. int t;
  30. for(int len=;len<=n;len++)
  31. {
  32. for(int i=;i<=*n;i++)
  33. {
  34. int j=i+len;
  35. for(int k=i;k<j;k++)
  36. {
  37. t=dp[i][k]+dp[k+][j]+a[i]*a[k+]*a[j+];
  38. if(t>dp[i][j])
  39. dp[i][j]=t;
  40. }
  41. }
  42. }
  43. }
  44.  
  45. void run()
  46. {
  47. int i;
  48. for(i=;i<=n;i++)
  49. {
  50. scanf("%d",&a[i]);
  51. a[i+n]=a[i];
  52. }
  53. ans = ;
  54. a[*n+]=a[];
  55. get_dp();
  56. for(i=;i+n-<=*n;i++)
  57. ans = max(ans,dp[i][i+n-]);
  58. printf("%d\n",ans);
  59. }
  60.  
  61. int main()
  62. {
  63. #ifdef LOCAL
  64. freopen("case.txt","r",stdin);
  65. #endif
  66. // while(scanf("%d",&n)!=EOF)
  67. scanf("%d",&n);
  68. run();
  69. return ;
  70. }

D acdream1209 qj的招待会

题意:有一些点,用大写字母或者小写字母表示,大写字母表示这个点上有人,小写表示没人。再给出一些有权边,题目求有人的点到qj所在的点的最短距离是多少

思路:改造一下dij就过了吧,在dij的循环里,如果当前点是一个有人点,直接就可以输出答案了

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. typedef pair<int,int> pii;
  5. const int INF = 1e9;
  6. const double eps = 1e-;
  7. const int N = ;
  8. int cas = ;
  9.  
  10. // http://acm.zju.edu.cn/mdj2014/contestInfo.do?contestId=2
  11.  
  12. int id[];
  13. void pre()
  14. {
  15. char c;
  16. for(c=;c<;c++)
  17. if(c>='A' && c<='Z') id[c]=c-'A';
  18. else id[c]=c-'a'+;
  19. }
  20.  
  21. int n=id['z']+;
  22. int m;
  23. int first[N];
  24. int d[N];
  25. bool done[N];
  26. int g[N][N];
  27.  
  28. void dij(int s)
  29. {
  30. for(int i=;i<n;i++)
  31. d[i]=INF;
  32. d[s]=;
  33. priority_queue<pii,vector<pii>,greater<pii> > q;
  34. memset(done,,sizeof(done));
  35. q.push(make_pair(d[s],s));
  36. while(!q.empty())
  37. {
  38. pii u=q.top(); q.pop();
  39. int x = u.second;
  40. // cout<<x<<endl;
  41. if(x< && x!=id['Z'])
  42. {
  43. printf("%c %d\n",x+'A',d[x]);
  44. return;
  45. }
  46. if(done[x]) continue;
  47. done[x]=;
  48. for(int v=;v<n;v++)
  49. {
  50. if(g[x][v]==- || x==v) continue;
  51. if(d[v]>d[x]+g[x][v])
  52. {
  53. d[v]=d[x]+g[x][v];
  54. q.push(make_pair(d[v],v));
  55. }
  56. }
  57. }
  58. }
  59.  
  60. int cnt;
  61.  
  62. void run()
  63. {
  64. char s1[],s2[];
  65. int i,a,b,c;
  66. cnt=;
  67. memset(g,-,sizeof(g));
  68. for(i=;i<m;i++)
  69. {
  70. scanf("%s%s%d",s1,s2,&c);
  71. a=id[s1[]];
  72. b=id[s2[]];
  73. if(g[a][b]==- || g[a][b]>c)
  74. {
  75. g[a][b]=g[b][a]=c;
  76. }
  77. }
  78. dij(id['Z']);
  79. }
  80.  
  81. int main()
  82. {
  83. #ifdef LOCAL
  84. freopen("case.txt","r",stdin);
  85. #endif
  86. pre();
  87. n=id['z']+;
  88. // cout<<"n="<<n<<endl;
  89. while(scanf("%d",&m)!=EOF)
  90. run();
  91. return ;
  92. }

E 题目都还没看。。看心情补吧。。

Acdream手速赛7的更多相关文章

  1. ACDream手速赛2

    地址:http://acdream.info/onecontest/1014   都是来自Codeforce上简单题.   A. Boy or Girl 简单字符串处理   B. Walking in ...

  2. 快速切题 acdream手速赛(6)A-C

    Sudoku Checker Time Limit: 2000/1000MS (Java/Others)Memory Limit: 128000/64000KB (Java/Others) Submi ...

  3. ACdream区域赛指导赛之手速赛系列(2)

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/DaiHaoC83E15/article/details/26187183        回到作案现场 ...

  4. ACdream区域赛指导赛之手速赛系列(5) 题解

    A - Problem A Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) Submi ...

  5. ACdream区域赛指导赛之手速赛系列(7)

    A -Dragon Maze Time Limit: 2000/1000MS (Java/Others)Memory Limit: 128000/64000KB (Java/Others) Submi ...

  6. Contest - 2014 SWJTU ACM 手速测试赛(2014.10.31)

    题目列表: 2146 Problem A [手速]阔绰的Dim 2147 Problem B [手速]颓废的Dim 2148 Problem C [手速]我的滑板鞋 2149 Problem D [手 ...

  7. 手速太慢QAQ

    显然D是个细节题,但是还剩1h时看眼榜还没人过EF,只好冷静写D,大概思路是任何时候如果min(n,m)<=2,max(n,m)<=4暴搜,否则直接贪心是很对的,即第一步让S.T长度平均化 ...

  8. 河南省acm第九届省赛--《表达式求值》--栈和后缀表达式的变形--手速题

    表达式求值 时间限制:1000 ms | 内存限制:65535 KB 难度:3   描述 假设表达式定义为:1. 一个十进制的正整数 X 是一个表达式.2. 如果 X 和 Y 是 表达式,则 X+Y, ...

  9. 打字机游戏Ⅱ之手速pk

    前言 demo预览->typewriter gameⅡ (chrome only 没做兼容) 别看一开始时速度不快,会线性增长的哦,反正楼主的score还没达到过40... 为什么叫Ⅱ呢?之前写 ...

随机推荐

  1. Android 关于软键盘

    一..弹出的时候显示Editext框 添加布局replay_input <?xml version="1.0" encoding="utf-8"?> ...

  2. python 基础 6.2 raise 关键字使用

    一. raise 关键字    raise 用来触发异常    语法如下:     raise[Exception [,args [,traceback]]]     语句中Exception 是异常 ...

  3. 九度OJ 1046:求最大值 (基础题)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:9861 解决:4013 题目描述: 输入10个数,要求输出其中的最大值. 输入: 测试数据有多组,每组10个数. 输出: 对于每组输入,请输 ...

  4. Grunt学习笔记【8】---- grunt-angular-templates插件详解

    本文主要讲如何用Grunt打包AngularJS的模板HTML. 一 说明 AngularJS中使用单独HTML模板文件的地方非常多,例如:自定义指令.ng-include.templateUrl等. ...

  5. java 线程 被相互排斥堵塞、检查中断演示样例解说----thinking java4

    package org.rui.thread.block; /** * 被相互排斥堵塞 就像在interrupting.java中看到的,假设你偿试着在一个对象上调用其synchronized方法, ...

  6. python cookbook第三版学习笔记八:解析码流

    Binascii模块 通过名字很容易知道这个模块的作用,binary, ascii.两个字母的合成,也就是二进制和ascii的转换模块 下面先介绍下字母的ascii码 a-z的ascii是从97-12 ...

  7. ExtJS教程(5)---Ext.data.Model之高级应用

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/jaune161/article/details/37391399 1.Model的数据验证 这里借助 ...

  8. 转 Spring 组件 <context:component-scan base-pakage="">用法

    1.如果不想在xml文件中配置bean,我们可以给我们的类加上spring组件注解,只需再配置下spring的扫描器就可以实现bean的自动载入. <!-- 注解注入 --> <co ...

  9. 微信小程序开发:学习笔记[3]——WXSS样式

    微信小程序开发:学习笔记[3]——WXSS样式 快速开始 介绍 WXSS(WeiXin Style Sheets)是一套用于小程序的样式语言,用于描述WXML的组件样式,也就是视觉上的效果. WXSS ...

  10. ZOJ - 3865 Superbot 【BFS】

    题目链接 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3865 思路 一个迷宫题 但是每次的操作数和普通的迷宫题不一样 0 ...