Puente Azul Zhenti: Triángulo de Yang Hui (pensamiento + dos puntos)

texto

Tema Descripción

inserte la descripción de la imagen aquí

Ideas y códigos de temas

Las propiedades básicas del triángulo de Yanghui: simetría izquierda y derecha, por lo que siempre que el número que aparece en la mitad derecha del triángulo de Yanghui aparezca en la mitad izquierda y la posición sea simétrica, la respuesta debe estar en la mitad izquierda

inserte la descripción de la imagen aquí

Idea: para cada fila oblicua y fila vertical, aumenta secuencialmente de arriba a abajo. Debe quedar claro que todos los números aparecerán en el triángulo de Yanghui, como x, debe haber C(x,1) correspondiente a x, así que no se preocupe si hay una solución, pero necesitamos encontrar la posición más alta con un valor de x y necesitamos enumerar de abajo hacia arriba , porque si x aparece en la posición (i, j) para el primero tiempo, entonces esto Los números en la parte superior izquierda, superior y superior derecha de la posición serán más pequeños que x, por lo que podemos enumerar las filas oblicuas y usar dicotomía para enumerar las posiciones que aparecen en cada fila oblicua. Tenga en cuenta que la enumeración es de abajo hacia arriba. De acuerdo con la propiedad 2 anterior, se puede obtener el método de cálculo del triángulo de Yang-Hui optimizado por el número de combinaciones.
Código:

#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;
}

Epílogo


"Si estás indeciso, puedes preguntarle a la brisa primaveral, y si la brisa primaveral no habla, seguirás a tu corazón" significa: si tienes dudas sobre algo, pregúntale a la brisa primaveral cómo hacerlo. . "Si no está decidido, puede preguntarle a la brisa primaveral. Si la brisa primaveral no habla, seguirá su corazón". La oración proviene del "Jianlai" escrito por el escritor de Internet "Fenghuo Opera Princes". El texto original es: "Si estás indeciso, puedes preguntarle a la brisa primaveral. Sigue tu corazón".

inserte la descripción de la imagen aquí


Supongo que te gusta

Origin blog.csdn.net/weixin_46627433/article/details/123945269
Recomendado
Clasificación