HDU 1010,2013,2018

//Made by syx
//Time: 2010年7月28日 16:55:39
//1010 Tempter of the Bone
//2013 蟠桃记
//2018 母牛的故事
//

//
//
//

//void qsort( void *buf, size_t num, size_t size, int (*compare)(const void *, const void *) );

//功能: 对buf 指向的数据(包含num 项,每项的大小为size)进行快速排序。如果函数compare 的第一个参数小于第二个参数,
//返回负值;如果等于返回零值;如果大于返回正值。函数对buf 指向的数据按升序排序

/*
//2018 母牛的故事
//递推:
//首先,假定我们要求第n年有多少只母牛,可以分两部分进行:
//一、在三年前,即n-3出生的母牛,必定都会在第n年生出牛来(之所以是三年前而不是四年前是因为一开始就算第1年而不是第0年),所以第n年的牛数必定有n-3年前的牛数的两倍以上
//二、算掉那两倍以上的牛数,剩下的牛是那些呢?就是在第n-3年到第n年之间所生的牛数了,也就是第n-1年的牛数减去第n-3年的牛数。
//得出递推式

//当n > 4 时f(n) = f(n-3)*2 + f(n-1) - f(n-3) = f(n-1) + f(n-3).     否则f(n) = n

//Accepted 2018 0MS 244K 222 B C++ syx_China
#include <iostream>
using namespace std;
int main()
{
int f[55] = {1,2,3,4,6};
int i = 0;
for(i=5; i<55; ++i)
f[i] = f[i-1] + f[i-3];
int n;
while(cin>>n&&n!=0)
{
cout<<f[n-1]<<endl;
}
return 0;
}

*/
/*

//2018 母牛的故事
//Accepted 2018 0MS 244K 263 B C++ syx_China
#include <iostream>
using namespace std;
int getCow(int n)
{
if(n<=3)
return n;
else
{
return getCow(n-1) + getCow(n-3);
}
}

int main()
{
int n;
while(cin>>n&&n!=0)
{
int result = getCow(n);
cout<<result<<endl;
}
return 0;
}



*/
/*
//2013 蟠桃记

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int n;
while(cin>>n)
{
int reuslt = (3*pow(2,n-1) - 2);
cout<<reuslt<<endl;
}
return 0;
}



*/
/*
//2013 蟠桃记
#include <iostream>
using namespace std;
int main()
{
int n;
while(cin>>n)
{
   int result = 1;
   while(--n)
   {
    result = 2*(result + 1);
   }
   cout<<result<<endl;
}
return 0;
}
*/
/*
//1010 Tempter of the Bone
#include <iostream>
using namespace std;

int flag = 0;//记录是否已经找到一条出路
int iDoor,jDoor;//记录门的位置

void mainFuntion(char (*b)[7],int iDog,int jDog,int T,int N,int M)
{
if(flag) return;

if(iDog>=1 && iDog<=N && jDog>=1 && jDog<=M)//判断位置是否在给定的范围内
{
   if(b[iDog][jDog] == 'X') return ;
   if(T == 0)//如果这是第T秒
   {
    if(b[iDog][jDog] == 'D')//且当前位置是D
    {
     flag++;
     return ;
    }
   }
   else if(abs(iDog-jDog)%2==abs(iDoor-jDoor)%2&&abs(T)%2==0||abs(iDog-jDog)%2!=abs(iDoor-jDoor)&&abs(T)%2==1)
   {
    b[iDog][jDog] = 'X';//当前位置已走过,向四周搜索!
    mainFuntion(b,iDog+1,jDog,T-1,N,M);

    mainFuntion(b,iDog-1,jDog,T-1,N,M);

    mainFuntion(b,iDog,jDog+1,T-1,N,M);

    mainFuntion(b,iDog,jDog-1,T-1,N,M);
    b[iDog][jDog] = '.';
   }
}
return;
}

int main()
{
char b[7][7] = {0};
int M,N,T;
while(cin>>N>>M>>T && (M && N && T))
{
   int num = 0;//记录可走木板数
   int i , j;
   int iDog,jDog;
   //int iDoor,jDoor;
   iDoor = 0,jDoor = 0;
  
   for(i=1; i<=N; ++i)
    for(j=1; j<=M; ++j)
    {
     cin>>b[i][j];
     if(b[i][j] == 'S')
     {
      iDog = i;
      jDog = j;
     }
     else if(b[i][j] == 'D')
     {
      iDoor = i;
      jDoor = j;
     }
     else
      num++;
    }

   //if(num>=T)
   //if(abs(jDog-iDog)%2==abs(jDoor-iDoor)%2&&T%2==0||abs(jDog-iDog)%2!=abs(jDoor-iDoor)&&T%2==1||M*N-num>=T)
   if( ((abs(jDoor - jDog) + abs(iDoor - iDog)) % 2 == T % 2) && (num>=T))
    mainFuntion(b,iDog,jDog,T,N,M);

  
   if(flag) cout<<"YES"<<endl;
   else cout<<"NO"<<endl;
   //cout<<flag<<endl;
  
   flag = 0;
  
}
return 0;
}
*/

作者:BuildNewApp
出处:http://syxchina.cnblogs.comBuildNewApp.com
本文版权归作者、博客园和百度空间共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则作者会诅咒你的。
如果您阅读了我的文章并觉得有价值请点击此处,谢谢您的肯定1。
原文地址:https://www.cnblogs.com/syxchina/p/2197572.html