HDU ACM 2113 一道简单的题目,请教高手。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU ACM 2113 一道简单的题目,请教高手。相关的知识,希望对你有一定的参考价值。

Problem Description
有一天, KIKI 收到一张奇怪的信, 信上要KIKI 计算出给定数各个位上数字为偶数的和.
eg. 5548
结果为12 , 等于 4 + 8

KIKI 很苦恼. 想请你帮忙解决这个问题.

Input
输入数据有多组,每组占一行,只有一个数字,保证数字在INT范围内.

Output
对于每组输入数据,输出一行,每两组数据之间有一个空行.

Sample Input
415326
3262

Sample Output
12

10

Author
kiki

我的解答:
#include<stdio.h>
#include<string.h>
int main()

char str[1000];
int len,i,sum;
while(scanf("%s",&str)!=EOF)

sum=0;
len=strlen(str);
for(i=0;i<len;i++)

if(str[i]=='2')
sum+=2;
if(str[i]=='4')
sum+=4;
if(str[i]=='6')
sum+=6;
if(str[i]=='8')
sum+=8;

printf("%d\n\n",sum);

return 0;


结果提示Presentation Error,请高手指教啊!谢谢!

答案没错,是输出格式问题··

Output 中要求每两组数据之间有一个空行.
所以最后一行不用输出一行一个空行
改一下就行了··,这种题目都有,汗···
#include<stdio.h>
#include<string.h>
int main()

char str[1000];
int len,i,sum;
int re = scanf("%s",&str);
while(re != EOF)

sum=0;
len=strlen(str);
for(i=0;i<len;i++)

if(str[i]=='2')
sum+=2;
if(str[i]=='4')
sum+=4;
if(str[i]=='6')
sum+=6;
if(str[i]=='8')
sum+=8;

printf("%d\n",sum);
re = scanf("%s",&str);
if(re != EOF)

printf("\n");


return 0;
参考技术A Presentation Error是输出格式错误! 参考技术B 楼上的也太见怪了吧? 这种格式要求在ACM比赛中很常见的 参考技术C printf("%d\n\n",sum); 会不会这里多了一个换行?

HDU 3853:LOOPS

LOOPS

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=3853

题意:

有一个网格,从点(1,1)开始走,要走到点(n,m),点(X,Y)可以走到点(X,Y),(X,Y+1),(X+1,Y),概率分别为p0,p1,p2,每走一步耗费2点魔力,求走到终点所耗费的魔力的期望

 

题解:

一道简单的求期望的题,不会求期望的可以看下这里

具体公式如下: dp[i][j]=p[i][j][0]*dp[i][j]+p[i][j][1]*dp[i][j+1]+p[i][j][2]*dp[i+1][j]

即:dp[i][j]=(p[i][j][1]*dp[i][j+1]+p[i][j][2]*dp[i+1][j])/(1.0-p[i][j][0])

此题有个坑点,当点(x,y)的p0为1时,期望为无穷大,但题目保证答案会小于1000000,因此(x,y)这个点一定是到不了的

             

代码

#include<stdio.h>
#include<math.h>
const double eps=1e-3;
double p[1000][1000][3];
int main()
{
  int n,m;
  while(~scanf("%d%d",&n,&m))
  {
    for(int i=0;i<n;++i)
    for(int j=0;j<m;++j)
    scanf("%lf%lf%lf",&p[i][j][0],&p[i][j][1],&p[i][j][2]);
    p[n-1][m-1][0]=0.0;
    for(int i=n-1;i>=0;--i)
    for(int j=m-1;j>=0;--j)
    if(i!=n-1||j!=m-1)
    {
      double x=1-p[i][j][0];
      p[i][j][0]=0.0;
      if(fabs(x)<eps)continue;
      if(i<n-1)p[i][j][0]+=p[i][j][2]*p[i+1][j][0];
      if(j<m-1)p[i][j][0]+=p[i][j][1]*p[i][j+1][0];
      p[i][j][0]+=2.0;
      p[i][j][0]/=x;
    }
    printf("%.3f\\n",p[0][0][0]);
  }
}

  

以上是关于HDU ACM 2113 一道简单的题目,请教高手。的主要内容,如果未能解决你的问题,请参考以下文章

HDU1757又是一道矩阵快速幂模板题

HDU2193-AVL-数据结构-AVL

HDU 1074 - Doing Homework - [状压DP]

题解报告:hdu 1260 Tickets

动态规划问题

HDU - 1257 最少拦截系统(dp或贪心)