记录编号 176817 评测结果 AAAAAAAAAA
题目名称 [FJOI 2007] 轮状病毒 最终得分 100
用户昵称 Gravatar<蒟蒻>我要喝豆奶 是否通过 通过
代码语言 C++ 运行时间 0.004 s
提交时间 2015-08-09 21:30:14 内存使用 0.32 MiB
显示代码纯文本
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;

struct BIGNUM{
	string s;
	friend BIGNUM operator +(BIGNUM a,BIGNUM b){
		string s1=a.s;
		string s2=b.s;
		if(s1.length()>s2.length() ){
      	   string ts=s1;
      	   s1=s2;
      	   s2=ts;
    	}
   	 	int i;
   	    int j; 
   	    for(i=s2.length()-1,j=s1.length()-1;j>=0;j--,i--){
      	  	int index=i;        
      	  	int sum=(s2[i]-'0')+(s1[j]-'0');
      	  	while(sum>=10){
       	      	s2[index]=(char)(sum%10+'0');
      	      	if(index<=0){
       	         	s2="1"+s2;
       	         	i++;
       	 		    index++;
       	  	       break;
       	   	    }
       	    	  index--;
           	   sum=(s2[index]-'0')+1;
          	}
    		s2[index]=(char)(sum%10+'0');
    	}
		BIGNUM aa;
		aa.s=s2; 
    	return aa;		
	}
	friend BIGNUM operator - (BIGNUM A,BIGNUM B){
			string s1=A.s;
			string s2=B.s;
    		int l1=s1.size();
    		int l2=s2.size();
    		int a[241]={0},b[241]={0},c[241]={0};
    		if(((s1<s2)&&(l1==l2))||(l1<l2)){
      	       cout<<'-';
     		   string s3=s1;
     		   s1=s2;
               s2=s3;
            }
   			else
        		if(s1==s2){
        			BIGNUM k;
        			k.s="0";
        			return k;
			}
			int m=s1.size();
    		for(int i=0;i<m;++i)
    		{
        		a[m-i-1]=s1[i]-'0';
    		}
    		int n=s2.size();
    		for(int i=0;i<n;++i){
        		b[n-i-1]=s2[i]-'0';
    		}
    		int len = 0;
    		len=(m>n?m:n);
    		for(int i=0;i<len;++i)
    		{
        		if(a[i]<b[i])
        		{
            		--a[i+1];
            		a[i]+=10;
        		}
        		c[i]=a[i]-b[i];
    		}
    		for(int i=len-1;i>0;i--)
    		{
	    		if(c[i]==0)
	        		len--;
	    		else
	        		break;
    		}
    		string ANS;
    		for(int i=len-1;i>=0;i--)
    		{
        		ANS+=(char)(c[i]+48);
    		}
    		BIGNUM kk;
			kk.s=ANS;
		return kk;
	}
};
int n;
int main(){
	freopen("bzoj_1002.in","r",stdin);
	freopen("bzoj_1002.out","w",stdout);
	cin>>n;
	if(n==1){
		cout<<1;
		return 0;
	}
	BIGNUM zhong;
	BIGNUM temp; temp.s="1";
	BIGNUM ans; ans.s="5";
	BIGNUM two ; two.s="2";
	for(int i=3;i<=n;i++){
		zhong=ans;
		ans=(ans+ans)+(ans-temp)+two;
		temp=zhong;
	}
	cout<<ans.s;
	return 0;
}