这个2B题还好~~



题目大意:

给出一个矩阵。从左上走到右下,仅仅能往右或下走。路径中每一个格子有一个数。这些数相乘得出一个数。

求这个数末尾零最少的一条路径。



解题思路:



找出一条路径。乘积得数中素因子2的个数最少,再找出一个素因子5最少, 比較两个输出最小的。

有意外情况就是有数为零。这样的情况把零当成10跑一遍,假设素因子最少为0。输出路径,假设不是,输出经过零的路径。





以下是代码:

  1. #include <set>
  2. #include <map>
  3. #include <queue>
  4. #include <math.h>
  5. #include <vector>
  6. #include <string>
  7. #include <stdio.h>
  8. #include <string.h>
  9. #include <stdlib.h>
  10. #include <iostream>
  11. #include <cctype>
  12. #include <algorithm>
  13.  
  14. #define eps 1e-10
  15. #define pi acos(-1.0)
  16. #define inf 107374182
  17. #define inf64 1152921504606846976
  18. #define lc l,m,tr<<1
  19. #define rc m + 1,r,tr<<1|1
  20. #define zero(a) fabs(a)<eps
  21. #define iabs(x) ((x) > 0 ?
  22.  
  23. (x) : -(x))
  24. #define clear1(A, X, SIZE) memset(A, X, sizeof(A[0]) * (min(SIZE,sizeof(A))))
  25. #define clearall(A, X) memset(A, X, sizeof(A))
  26. #define memcopy1(A , X, SIZE) memcpy(A , X ,sizeof(X[0])*(SIZE))
  27. #define memcopyall(A, X) memcpy(A , X ,sizeof(X))
  28. #define max( x, y ) ( ((x) > (y)) ? (x) : (y) )
  29. #define min( x, y ) ( ((x) < (y)) ?
  30.  
  31. (x) : (y) )
  32.  
  33. using namespace std;
  34.  
  35. int dp[1005][1005][2];
  36. int cnt[1005][1005][2];
  37. int pre[1005][1005][2];
  38.  
  39. void output(int x,int y,int num)
  40. {
  41. if(x==0&&y==0)return ;
  42. if(pre[x][y][num]==0)
  43. {
  44. output(x,y-1,num);
  45. printf("R");
  46. }
  47. else
  48. {
  49. output(x-1,y,num);
  50. printf("D");
  51. }
  52. }
  53.  
  54. int main()
  55. {
  56. int input,n,x=-1,y=-1;
  57. scanf("%d",&n);
  58. for(int i=0; i<n; i++)
  59. {
  60. for(int j=0; j<n; j++)
  61. {
  62. scanf("%d",&input);
  63. if(input==0)
  64. {
  65. cnt[i][j][0]=1;
  66. cnt[i][j][1]=1;
  67. x=i;
  68. y=j;
  69. continue;
  70. }
  71. cnt[i][j][0]=0;
  72. while(input%2==0)
  73. {
  74. cnt[i][j][0]++;
  75. input/=2;
  76. }
  77. cnt[i][j][1]=0;
  78. while(input%5==0)
  79. {
  80. cnt[i][j][1]++;
  81. input/=5;
  82. }
  83. }
  84. }
  85. clearall(pre,-1);
  86. for(int i=0; i<n; i++)
  87. {
  88. for(int j=0; j<n; j++)
  89. {
  90. if(i==0)
  91. {
  92. if(j==0)
  93. {
  94. dp[0][0][0]=cnt[0][0][0];
  95. dp[0][0][1]=cnt[0][0][1];
  96. }
  97. else
  98. {
  99. dp[0][j][0]=cnt[0][j][0]+dp[0][j-1][0];
  100. dp[0][j][1]=cnt[0][j][1]+dp[0][j-1][1];
  101. pre[0][j][0]=0;
  102. pre[0][j][1]=0;
  103. }
  104. }
  105. else if(j==0)
  106. {
  107. dp[i][0][0]=dp[i-1][0][0]+cnt[i][0][0];
  108. dp[i][0][1]=dp[i-1][0][1]+cnt[i][0][1];
  109. pre[i][0][0]=1;
  110. pre[i][0][1]=1;
  111. }
  112. else
  113. {
  114. if(dp[i][j-1][0]>dp[i-1][j][0])
  115. {
  116. dp[i][j][0]=dp[i-1][j][0]+cnt[i][j][0];
  117. pre[i][j][0]=1;
  118. }
  119. else
  120. {
  121. dp[i][j][0]=dp[i][j-1][0]+cnt[i][j][0];
  122. pre[i][j][0]=0;
  123. }
  124. if(dp[i][j-1][1]>dp[i-1][j][1])
  125. {
  126. dp[i][j][1]=dp[i-1][j][1]+cnt[i][j][1];
  127. pre[i][j][1]=1;
  128. }
  129. else
  130. {
  131. dp[i][j][1]=dp[i][j-1][1]+cnt[i][j][1];
  132. pre[i][j][1]=0;
  133. }
  134. }
  135. }
  136. }
  137. if(x!=-1)
  138. {
  139. if(min(dp[n-1][n-1][0],dp[n-1][n-1][1])==0)
  140. {
  141. printf("0\n");
  142. if(dp[n-1][n-1][0]==0)output(n-1,n-1,0);
  143. else output(n-1,n-1,1);
  144. }
  145. else
  146. {
  147. printf("1\n");
  148. for(int i=0;i<n-1;i++)
  149. {
  150. if(i==x)
  151. {
  152. for(int j=0;j<n-1;j++)
  153. {
  154. printf("R");
  155. }
  156. }
  157. printf("D");
  158. }
  159. }
  160. }
  161. else
  162. {
  163. printf("%d\n",min(dp[n-1][n-1][0],dp[n-1][n-1][1]));
  164. if(dp[n-1][n-1][0]<dp[n-1][n-1][1])
  165. {
  166. output(n-1,n-1,0);
  167. }
  168. else output(n-1,n-1,1);
  169. }
  170. return 0;
  171. }

Codeforces Beta Round #2 B. The least round way的更多相关文章

  1. Codeforces Beta Round #80 (Div. 2 Only)【ABCD】

    Codeforces Beta Round #80 (Div. 2 Only) A Blackjack1 题意 一共52张扑克,A代表1或者11,2-10表示自己的数字,其他都表示10 现在你已经有一 ...

  2. Codeforces Beta Round #62 题解【ABCD】

    Codeforces Beta Round #62 A Irrational problem 题意 f(x) = x mod p1 mod p2 mod p3 mod p4 问你[a,b]中有多少个数 ...

  3. Codeforces Beta Round #83 (Div. 1 Only)题解【ABCD】

    Codeforces Beta Round #83 (Div. 1 Only) A. Dorm Water Supply 题意 给你一个n点m边的图,保证每个点的入度和出度最多为1 如果这个点入度为0 ...

  4. Codeforces Beta Round #13 C. Sequence (DP)

    题目大意 给一个数列,长度不超过 5000,每次可以将其中的一个数加 1 或者减 1,问,最少需要多少次操作,才能使得这个数列单调不降 数列中每个数为 -109-109 中的一个数 做法分析 先这样考 ...

  5. Codeforces Beta Round #79 (Div. 2 Only)

    Codeforces Beta Round #79 (Div. 2 Only) http://codeforces.com/contest/102 A #include<bits/stdc++. ...

  6. Codeforces Beta Round #77 (Div. 2 Only)

    Codeforces Beta Round #77 (Div. 2 Only) http://codeforces.com/contest/96 A #include<bits/stdc++.h ...

  7. Codeforces Beta Round #76 (Div. 2 Only)

    Codeforces Beta Round #76 (Div. 2 Only) http://codeforces.com/contest/94 A #include<bits/stdc++.h ...

  8. Codeforces Beta Round #75 (Div. 2 Only)

    Codeforces Beta Round #75 (Div. 2 Only) http://codeforces.com/contest/92 A #include<iostream> ...

  9. Codeforces Beta Round #74 (Div. 2 Only)

    Codeforces Beta Round #74 (Div. 2 Only) http://codeforces.com/contest/90 A #include<iostream> ...

  10. Codeforces Beta Round #73 (Div. 2 Only)

    Codeforces Beta Round #73 (Div. 2 Only) http://codeforces.com/contest/88 A 模拟 #include<bits/stdc+ ...

随机推荐

  1. js里的稀疏数组

    今天在逛掘金网站的时候,在一篇文章里学到一个新名字,稀疏数组,特此记录一下. 稀疏数组就是包含从0开始的不连续索引的数组.也就是说数组中大部分的内容值都未被使用(或都为零). var arr = ne ...

  2. Oracle数据库自定义函数练习20181031

    --测试函数3 CREATE OR REPLACE FUNCTION FN_TEST3 (NUM IN VARCHAR2) RETURN VARCHAR2 IS TYPE VARCHAR2_ARR ) ...

  3. JS_类数组

    [目录] 什么是数组 非类数组 类数组对象转化为数组 [类数组] 什么是类数组? 定义: 不具有数组的所具有的方法 拥有length属性,其属性(索引)为非负整数 类数组 var obj = { 0 ...

  4. 如何用SQL语句在指定字段前面插入新的字段?

    如何用SQL语句在指定字段前面插入新的字段? 2007-10-17 09:28:00|  分类: 笔记|举报|字号 订阅     create proc addcolumn @tablename va ...

  5. thinkphp5中vendor的使用?

    1.创建处理数组的类ArrayList.php <?php /** * ArrayList实现类 * @author liu21st <liu21st@gmail.com> */ c ...

  6. [Python3网络爬虫开发实战] 1.8.1-pyspider的安装

    pyspider是国人binux编写的强大的网络爬虫框架,它带有强大的WebUI.脚本编辑器.任务监控器.项目管理器以及结果处理器,同时支持多种数据库后端.多种消息队列,另外还支持JavaScript ...

  7. Python之面向对象继承和派生

    Python之面向对象继承和派生 什么是继承: 继承是一种创建新的类的方法.在Python中,新建的类可以继承自一个或多个父类.原始类称为基类或超类. 新建的类称为派生类或子类. Python中类的继 ...

  8. [WPF自定义控件库]为Form和自定义Window添加FunctionBar

    1. 前言 我常常看到同一个应用程序中的表单的按钮----也就是"确定"."取消"那两个按钮----实现得千奇百怪,其实只要使用统一的Style起码就可以统一按 ...

  9. 移动Web解决方案的链接收藏

    信息类 html5 浏览器兼容性查询 - 浏览器内建对象文档 es5规范浏览器兼容性表格 es6规范浏览器兼容性表格 stackoverflow 最靠谱的问题解决方案 github 开源代码网站 全球 ...

  10. 62. mybatis 使用PageHelper不生效【从零开始学Spring Boot】

    [从零开始学习Spirng Boot-常见异常汇总] 在Spirng Boot中集成了PageHelper,然后也在需要使用分页的地方加入了如下代码: PageHelper.startPage(1,1 ...