程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> hdu 2451 Simple Addition Expression(數位DP )成敗在於細節

hdu 2451 Simple Addition Expression(數位DP )成敗在於細節

編輯:C++入門知識

亞洲區域賽的題,簡單的數位DP題,注重細節。

任何細節都有可能導致wa,所以沒有絕對的水題。

把握好細節,此題便A。


 

#include<stdio.h>
__int64 getans(__int64 s)
{
	__int64 ans=0,tmp=1000000000;//這裡最大只能取10^9,取10^10就ce了
	if(s==0)return 0;//0單獨考慮
	while(s<tmp)
		tmp/=10;
	while(s)
	{
        __int64 p=s/tmp,num;
		if(p>=4)//不是最後一位可以取0,1,2,3四個值,之前只考慮了0,1,2三個值,好傷。。。。。
		{
			num=1;
			while(s)
			{
				num*=4;
				s/=10;
			}
			ans+=num/4*3;//最後一位只能取0,1,2,
		}
		else
		{
			__int64 h=s;
			num=p;
			h/=10;
			if(h==0)//最後一位
                            ans+=num;
			else//不是最後一位
			{
			  while(h)
			  {
				num*=4;
				h/=10;
			  }
			  ans+=num/4*3;
			}
		}
		s%=tmp;
		tmp/=10;
	}
	return ans;
}
int main()
{
	__int64 n;
	while(scanf("%I64d",&n)!=-1)
	   printf("%I64d\n",getans(n));
	return 0;
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved