⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 2501.cpp

📁 HDOJ2501-2681acm解题报告
💻 CPP
字号:
//核心代码
//#define N 30
//fn_is(f(n-1)+2*f(n-2))
//map(1,1)
//map(2,3)
#include <stdio.h>

#define _ACM_INPUT_EOF_(_ACM_FORMAT_, ...)    \
  int _ACM_I_=-1,_ACM_COUNT_=0;                  \
  for(;scanf(_ACM_FORMAT_, __VA_ARGS__) != EOF;--_ACM_I_) \
    
#define _ACM_INPUT_COUNT_(_ACM_FORMAT_, ...)                  \
  int _ACM_I_,_ACM_COUNT_;                          \
  scanf("%d",&_ACM_COUNT_);                          \
  for(_ACM_I_=0;                              \
      _ACM_I_<_ACM_COUNT_ && scanf(_ACM_FORMAT_, __VA_ARGS__) != EOF; \
      _ACM_I_++)       \

#define _ACM_INPUT_VALUE_(_ACM_CONDITION_,_ACM_FORMAT_,...)        \
  int _ACM_I_=-1,_ACM_COUNT_=0;                        \
  for(;scanf(_ACM_FORMAT_, __VA_ARGS__)!=EOF&&!(_ACM_CONDITION_);--_ACM_I_) \

#define _ACM_OUTPUT_(_ACM_SEPARATORS_,_ACM_FORMAT_,...) \
  printf(_ACM_FORMAT_ _ACM_SEPARATORS_, __VA_ARGS__);    \
  
#define _ACM_OUTPUT_STRICT_(_ACM_SEPARATORS_,_ACM_FORMAT_,...)    \
  if (_ACM_I_ < _ACM_COUNT_-1) {                \
    if (_ACM_COUNT_) {                        \
      printf(_ACM_FORMAT_ _ACM_SEPARATORS_, __VA_ARGS__);    \
    } else {                            \
      printf(_ACM_SEPARATORS_ _ACM_FORMAT_, __VA_ARGS__);    \
    }                                \
  } else {                            \
    printf(_ACM_FORMAT_, __VA_ARGS__);                \
  }                                \


#define f(n) F<n>::value
#define fn_is(expr)                \
  template <int n> struct F {            \
    static const long long value = expr;    \
  };                        \

#define map(n,v)                \
  template <> struct F<n> {            \
    static const long long value = v;        \
  };                        \





// PROBLEM SPECIFIED CODE BEGIN


#define N 30

fn_is(f(n-1)+2*f(n-2))

map(1,1)

map(2,3)


// PROBLEM SPECIFIED CODE END





template <int n, bool cond=(n==1)> struct Wrapper;

template <int n> struct Wrapper<n,false> : public F<n> {
  Wrapper<n-1> prev;
  long long value;
  Wrapper():value(F<n>::value){}
};

template <int n> struct Wrapper<n,true> : public F<n> {
  long long value;
  Wrapper():value(F<n>::value){}
};

Wrapper<N> w;
const long long *result = &w.value - N;

int main() {
  int n;
  _ACM_INPUT_COUNT_("%d", &n) {
    printf("%I64d\n", result[n]);
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -