Blue Bridge Zhenti : Triangle de Yang Hui (réflexion + deux points)

texte

Description du sujet

insérez la description de l'image ici

Idées et codes de sujet

Les propriétés de base du triangle Yanghui : symétrie gauche et droite, donc tant que le nombre qui apparaît dans la moitié droite du triangle Yanghui apparaîtra dans la moitié gauche, et la position est symétrique, donc la réponse doit être dans la moitié gauche

insérez la description de l'image ici

Idée : pour chaque rangée oblique et rangée verticale, il augmente séquentiellement de haut en bas. Il doit être clair que tous les nombres apparaîtront dans le triangle Yanghui, tel que x, il doit y avoir C(x,1) correspondant à x , alors ne vous inquiétez pas s'il existe une solution, mais nous devons trouver la position la plus élevée avec une valeur de x et nous devons énumérer de bas en haut , car si x apparaît à la position (i, j) pour le premier temps, alors ceci Les nombres en haut à gauche, en haut et en haut à droite de la position seront plus petits que x, nous pouvons donc énumérer les rangées obliques et utiliser la dichotomie pour énumérer les positions qui apparaissent dans chaque rangée oblique. Notez que l'énumération est de bas en haut. Selon la propriété 2 ci-dessus, la méthode de calcul du triangle de Yang-Hui optimisée par le nombre de combinaisons peut être obtenue.
Code:

#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
const ll maxn=1e5+10;
ll n;
ll C(ll x,ll y){
    
    //计算组合数
    ll ans=1;
    for(int i=x,j=1;j<=y;j++,i--){
    
    
        ans=ans*i/j;
        if(ans>n)return ans;
    }
    return ans;
}
ll cha(ll k){
    
    
    ll l=2*k,r=max(n,l);
    //二分找出结果
    while(l<r){
    
    
        ll mid=(l+r)>>1;
        if(C(mid,k)>=n){
    
    
            r=mid;
        }else{
    
    
            l=mid+1;
        }
    }
    if(C(l,k)!=n)return 0;
    ll ans=l*(l+1)/2+k+1;//用等差数列进行求在这行之前所有数字
    cout<<ans;
    return 1;
}
int main(){
    
    
    cin>>n;
    ll ans=n;
    for(int i=16;;i--){
    
    
        if(cha(i))break;
    }

	return 0;
}

Épilogue


« Si tu es indécis, tu peux demander à la brise printanière, et si la brise printanière ne parle pas, tu suivras ton cœur » signifie : si tu hésites à propos de quelque chose, demande à la brise printanière comment faire. . " Si vous êtes indécis, vous pouvez demander à la brise printanière. Si la brise printanière ne parle pas, vous suivrez votre cœur. " La phrase vient du " Jianlai " écrit par l'écrivain Internet " Fenghuo Opera Princes ". Le texte original est : « Si vous êtes indécis, vous pouvez demander à la brise printanière. Suivez votre cœur ».

insérez la description de l'image ici


Je suppose que tu aimes

Origine blog.csdn.net/weixin_46627433/article/details/123945269
conseillé
Classement