hdoj 1290 구형 케이크 자 르 기 (전달 과 구분 문제)

항 전 50 주년 개교 기념일 에 바 치 는 선물
Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 13105    Accepted Submission(s): 7364  
Problem Description
어쩌면 너 는 투 덜 거 렸 을 지도 몰라 어쩌면 너 는 여전히 슬픔 을 품 고 있 을 지도 몰라 어쩌면 너 는 지척 에 있 을 지도 몰라 어쩌면 너 와 나 는 모든 학생 모교 에 대해   생명의 바 다 를 영원히 항해 하 는 것 은 올해 가 우리 항 저 우 전기 개교 50 주년 인 데, 이것 은 축복 할 만 한 날 이다.우 리 는 모교 에 어떤 선물 을 주어 야 합 니까?지금 여러분 들 에 게 가장 좋 은 선물 은 당연히 성 경기 의 좋 은 성적 입 니 다. 저 는 시합 에 참가 할 수 없습니다. 학교 에 DOOM III 구형 큰 케이크 를 드 리 겠 습 니 다. 이것 은 명 품 입 니 다. 제 가 반년 동안 돈 을 써 야 할 것 같 습 니 다.정식 개교 기념일 을 상상 하면 서 교장 선생님 이 직접 칼 을 들 고 이 큰 케이크 를 각지 에서 축하 하 러 온 학우 들 에 게 나 누 어 주 셨 으 면 좋 겠 습 니 다. 하하, 침 흘 렸 겠 죠. 잠시 만 요. 케이크 를 먹 기 전에 먼저 여러분 에 게 문 제 를 보 겠 습 니 다. 만약 에 교장 선생님 께 서 케이크 에 N 칼 을 자 르 셨 다 면 (교장 선생님 의 칼질 이 아주 좋 고 모든 칼 이 절대적 인 평면 입 니 다)이 구형 케이크 를 최대 몇 조각 으로 자 를 수 있 습 니까?이 문 제 를 풀 수 없어, 케이크 먹 을 게 없어!위 - 위 - 모 - 교 -, 위 - 위 - 알 - 떡 - (DGMM 을 위 한 것 이 아니 라 단풍 의 날개 가 가장 떠 오 르 는...), 플러스 - 오 일 -!
Input
입력 데 이 터 는 여러 개의 테스트 인 스 턴 스 를 포함 하고 모든 인 스 턴 스 는 한 줄 을 차지 하 며 줄 마다 정수 n (1 < = n < = 1000) 을 포함 하여 자 른 칼 수 를 표시 합 니 다.
Output
각 조 의 입력 데 이 터 는 해당 하 는 케이크 블록 수 를 출력 하고 테스트 인 스 턴 스 마다 한 줄 을 출력 하 십시오.
Sample Input
1 2 3
Sample Output
2 4 8
 문제 풀이 방향:
n - 1 개의 평면 이 있 을 때 분 단 된 공간 수 는 f (n - 1) 이다.      가장 많은 공간 수 를 가 지 려 면 n 번 째 평면 은 앞의 n - 1 평면 과 교차 해 야 하고 공 통 된 교차 선 이 있어 서 는 안 된다.      즉, 최대 n - 1 개의 교차 선 이 있다.이 n - 1 개의 교차 선 은 n 개의 평면 을 최대 g (n - 1) 개의 구역 으로 나 누 었 다.      (g (n) 은 (1) 의 직선 분 평면의 개수) 이 평면 은 원래 의 공간 을 둘 로 나 누고,      최대 g (n - 1) 개의 공간 이 증가 합 니 다.
        그러므로 f (n) = f (n - 1) + g (n - 1)    (  ps: g(n)=n(n+1)/2+1  )
            f(n-1)=f(n-2)+g(n-2)
                 ……
            f(2)=f(1)+g(1)
      왜냐하면 f (1) = g (1) = 2
      그래서 f (n) = 2 + (1 * 2 + 2 * 3 + 3 * 4 +... + (n - 1) n)/2 + (n - 1) //3*4=4*4-4=4*(4-1)=4*3
                =[ (1^2+2^2+3^2+4^2+……+n^2) - (1+2+3+……+n ) ]/2 + n+ 1
                =(n^3+5n)/6+1
ac 코드:
#include 
#define ll long long int
using namespace std;
int main()
{
    ll n;
    while(scanf("%lld",&n)!=EOF)
    {
        printf("%lld
",(n*n*n+5*n)/6+1); } return 0; }

좋은 웹페이지 즐겨찾기