Codeforces Round #269 (Div. 2) C

C. MUH and House of Cards


        题意:摞纸牌。。像下图那样,问能摞多少种不同的层。

Codeforces Round #269 (Div. 2) C_第1张图片

        思路:从1层开始往上枚举。先判是否满足摞i层的最少张数。如果满足,再判是否有多余的牌(因为每张都需要使用)。摞i层最少张数的通项是(3*(i+1))*i/2-i。没有剩余牌需要满足的条件是(n-2*i)%3==0。


#include <iostream>      
#include <stdio.h>      
#include <cmath>      
#include <algorithm>      
#include <iomanip>      
#include <cstdlib>      
#include <string>       
#include <vector>      
#include <queue>      
#include <stack>      
#include <map>    
#include <set>    
#include <string.h>
#include <ctype.h>      
  
using namespace std;    

#define ll long long

int main(){
	ll n;
	while(cin>>n){
		ll ans=0;
		for(ll i=1;;i++){
			if(n>=(3*(i+1))*i/2-i){
				if((n-2*i)%3==0){
					//cout<<i<<endl;
					ans++;
				}
			}else{
				break;
			}
			
		}
		cout<<ans<<endl;
	}
	return 0;
}


你可能感兴趣的:(Codeforces Round #269 (Div. 2) C)