중남대학 oj 1320 (대수 + 카트란 수)

1781 단어 수론
주소:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1320
1320: Scoop water
Time Limit: 2 Sec  
Memory Limit: 128 MB
Submit: 272  
Solved: 63
[ Submit][ Status][ Web Board]
Description
  zzy 는 오늘 두 개의 바가지 A 와 B 를 샀 는데 용량 이 모두 1 리터 이 고 동심 이 사라 지지 않 은 그 는 이 바가지 로 게임 을 할 계획 이다.
  먼저 zzy 는 용량 이 무한대 로 볼 수 있 는 물독 을 준 비 했 습 니 다. 처음에는 물독 이 비 었 습 니 다. 그리고 바가지 A 로 물독 에 물 을 넣 고 바가지 B 로 물독 의 물 을 퍼 냈 습 니 다. 바가지 B 로 물 을 퍼 냈 을 때 물독 에는 적어도 1 리터 의 물이 있어 야 합 니 다.이렇게 N 번 바가지 A 를 사용 하고 N 번 바가지 B 를 사용 하면 결국 물독 은 비어 있 을 것 이다.
Input
  파일 이 끝 날 때 까지 여러 개의 예 를 입력 하 십시오.
  예 마다 하나의 숫자 N (0) 만 포함 합 니 다.
Output
  모든 예 에 대해 하나의 수 를 출력 하 십시오. 모두 몇 가지 정확 한 물 푸 는 방식 으로 물 을 푸 는 과정 에서 B 바 가 지 를 사용 할 때 물독 에 충분 한 물이 있 음 을 나타 냅 니 다.
 (숫자 가 크기 때문에 출력 된 답 은 1000000007 입 니 다)
Sample Input
1 2
Sample Output
1 2
 
#include
#include
#include
using namespace std;
struct node{
    int num[2000];
    int g;
}a[10010];
long long int f=1000000007;
void cheng(int t,int m)  //      
{
    int k=0;
    for(int i=0;i=0;i--)
{
k=k*10000+a[t].num[i];
a[t].num[i]=k/m;
k=k%m;
}
while(!a[t].num[a[t].g-1]) a[t].g--;
}
long long int qumo () / / 모드 추출
{
long long int k=0;
for(int i=a[0].g-1;i>=0;i--)
{
k=k*10000+a[0].num[i];
a[0].num[i]=k/f;
k=k%f;
}
return k;
}
int main()
{
int i,j,l;
long long int ans;
a[1].g=1;a[1].num[0]=1;
for(i=2;i<=10000;i++)
{
cheng(i,4*i-2);
chu(i,i+1);
}
while(scanf("%d",&i)>0)
{
a[0]=a[i];
ans=qumo();
printf("%lld",ans);
}
return 0;
}

좋은 웹페이지 즐겨찾기