即日起在codingBlog上分享您的技术经验即可获得积分,积分可兑换现金哦。

1649 – Binomial coefficients

编程语言 qq_38158040 6℃ 0评论

Sample Input

2

2

15

Sample Output

1

(2,1)

4

(6,2) (6,4) (15,1) (15,14)

点击打开链接

人家的:

#define _CRT_SECURE_NO_WARNINGS   
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
using namespace std;  
  
#define pll pair  
#define M(a,b) make_pair(a,b)  
  
using namespace std;  
priority_queue, greater >q;  
long long m;  
long long c(int k, long long n)  
{  
    int i;  
    long long f = 1;  
    for (i = 1; i <= k; i++)  
    {  
        if ((f / i)>(m / (n - i + 1)))//如果发现算到第i步时结果已经超过m了,说明n肯定不是解,返回一个m+1  
            return m + 1;  
        f *= (n - i + 1);  
        f /= i;  
    }  
    return f;  
}  
void chk()  
{  
    long long l, r, mid, t;  
    int k;  
    for (k = 1; c(k, 2 * k) <= m; k++)//最小的范围是C(k,2*k)  
    {  
        l = k * 2;  
        r = m;  
        while (l <= r)  
        {  
            mid = (l + r) >> 1;  
            t = c(k, mid);  
            if (t == m)  
            {  
                q.push(M(mid, k));  
                if (mid == k * 2) break;  
                q.push(M(mid, mid - k));  
                break;  
            }  
            else if (t> m;  
        chk();  
        if (q.size())  
        {  
            printf("%d\n", q.size());  
            int len = q.size();  
            for (int i = 0; i < len; i++)  
            {  
                printf("(%lld,%lld)%c", q.top().first, q.top().second, i == len - 1 ? '\n' : ' ');  
                q.pop();  
            }  
        }  
        else  
            puts("0\n");  
    }  
    return 0;  
}  

我的:

#include 
using namespace std;
long long int jj(int n)
{
    long long sum=1;
    for(int i=2;i<=n;i++){
        sum*=i;
    }
    return sum;
}
long long int pp(int n,int k)
{
    long long sum=1;
    for(int i=n;i>n-k;i--){
        sum*=i;
    }
    return sum;
}
int main()
{
    int n; cin>>n;
    double t;
    while(n--){
        int a[10000],b[10000];
        int m;cin>>m;int kase=0;
        for(int i=1;i<=m;i++)
            for(int j=0;j<=i/2;j++){
                if(j==0){
                    t=1;
                    if(t==m){
                      a[kase]=i;b[kase]=0;kase++;
                    }
                }
                else{
                    t=(pp(i,j)+0.0)/(jj(j)+0.0);
                    if(t==m){
                        a[kase]=i;b[kase]=j; kase++;
                    }
                }

            }
            for(int i=0;i





转载请注明:CodingBlog » 1649 – Binomial coefficients

喜欢 (0)or分享 (0)
发表我的评论
取消评论

*

表情