2019 del azul del puente de la ronda preliminar


precipitación máxima

Significado de las preguntas:

1-49 a los 49 números, requiere divididos en 7 grupos, cada uno compuesto de 7 dígitos, cada grupo es la puntuación media para cada grupo.
La puntuación total es la media de puntuación para cada grupo, ahora puede decidir cómo agrupar, pidiendo la máxima puntuación en las mejores circunstancias es.

ideas:

Un total de siete grupos, cada puntuación total del grupo es la puntuación de la mediana, entonces la puntuación mínima de tres es inútil, codicioso con 21 para llenar un número mínimo: 1-21.
Para los cuatro grupos restantes, cada grupo es la mediana de las puntuaciones, y por lo tanto cada grupo el número mínimo de tres es inútil, codicioso con el número restante de mínimo 12 para llenar: 22-33
entonces la última la puntuación total es el número restante mínima: 34


secuencia de Fibonacci y la sección áurea

Significado de las preguntas:

Aquí Insertar imagen Descripción
n <= 2E9

ideas:

A primera vista pensé que era el alcance de los datos de la matriz de potencia rápido, entonces no hay ningún módulo es identificar problemas, si averiguar la respuesta es definitivamente un gran número.
De hecho, el tema ha recordado la relación se acercará a la sección áurea.
Se encontró que cuando la mesa de juego cuando n es mayor que 20, f (n) / f ( n + 1) son 0,61803399, sólo necesita contar con la línea de Qi Fibonacci secuencia de número de 1-21.

código:

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxm=1e4+5;
int f[maxm];
signed main(){
    f[1]=f[2]=1;
    for(int i=3;i<=21;i++){
        f[i]=f[i-1]+f[i-2];
    }
    int n;
    cin>>n;
    if(n>=20){
        n=20;
    }
    printf("%.8f\n",f[n]*1.0/f[n+1]);
    return 0;
}

cadena de reinado

Significado de las preguntas:

Xiaoming figura 1 correspondiente con las letras A, B correspondientes a 2, y así sucesivamente, con el Z correspondiente 26. Durante más de 27 digital de
Xiaoming con dos o más cadenas de bits corresponde a, por ejemplo, correspondiente a 27 AA, AB que corresponde a 28, AZ correspondiente a 52, LQ 329 corresponde.
¿Qué va a 2019 correspondiente cadena?

ideas:

Un ruido fuerte, como de 26-prometedora banda, pero pronto descubrió que el sujeto no está en 0-25, 1-26, pero.
Cuando un sitio se encuentra 26 veces (es decir, 26 de molde igual a 0), no permita que este bit de acarreo, que cambia de 0 a 26 en la línea.
Este cambio de la normal 0-25 1-26, A a Z corresponden respectivamente a
otras etapas y conversión binaria casi normal
finalmente calcular la respuesta es BYQ

código:

#include<bits/stdc++.h>
using namespace std;
signed main(){
    stack<char>q;
    int n=2019;
    while(n){
        int t=n%26;
        if(t==0){
            q.push('Z');
            n-=26;//少掉一个进位,这里改成减1也可以,效果是一样的
        }else{
            q.push('A'+t-1);
        }
        n/=26;
    }
    while(!q.empty()){
        cout<<q.top();
        q.pop();
    }
    return 0;
}

expresión Postfix

Significado de las preguntas:

Aquí Insertar imagen Descripción

ideas:

Dé un ejemplo:
0 2
. 1 2. 3
. Solución óptima 1 2 3 - -, la expresión postfix se convierte en infija 3- (1-2), la respuesta es 4.

Este ejemplo es para ilustrar a los efectos de esta pregunta, se pueden añadir en cualquier posición entre paréntesis.

Si no hay ningún signo negativo, la respuesta es que todos los números y.

Aquí están situación negativa en cuenta.
Debido a que puede paréntesis, a continuación, se puede utilizar un signo menos para dirigir un montón de otras negativo y se convierten en números positivos, por lo que puede directamente negativa a números positivos.
Sin embargo, tener en cuenta las circunstancias especiales:
1. Cuando todos los números son negativos, debido a la necesidad como minuendo número, por lo que habrá un número negativo no puede ser positivo, negativo glotones para el valor absoluto más pequeño de cambio positivo.
2. Cuando todos los números son positivos, ya que al menos debe haber un signo negativo para el trabajo, es necesario restar un número, codicioso menos el número positivo más pequeño.
Al menos un ejemplo de signo negativo actúa: x (yz), un número entre paréntesis debe restar fila no importa cuán

PS:
sentir los detalles de anuncios del lote, es fácil de volcar.

código:

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxm=2e5+5;
int a[maxm];
int n,m;
signed main(){
    cin>>n>>m;
    int len=n+m+1;
    int e=0;//记录负数的个数
    int ans=0;
    for(int i=1;i<=len;i++){
        cin>>a[i];
        if(a[i]<0)e++;
        ans+=a[i];
    }
    if(m){//如果有负号
        sort(a+1,a+1+len);
        if(e){//如果有负数
            if(e==len){//如果全是负数,那么只有一个负数不会被变成正数
                for(int i=1;i<=len-1;i++){
                    ans-=a[i]*2;
                }
            }else{//否则所有负数都可以变成正数
                for(int i=1;i<=e;i++){
                    ans-=a[i]*2;
                }
            }
        }else{//如果没有负数,因为至少减去一个数,因此贪心地减去最小的
            ans-=a[1]*2;
        }
    }
    cout<<ans<<endl;
    return 0;
}

prioridad para llevar

Significado de las preguntas:

Aquí Insertar imagen Descripción

ideas:

1E5 gama de datos, si el tiempo es ciertamente un tiempo de espera analógica directa.
Debido a que la mayoría de los artículos 1E5 meses, y cada tienda no afecta a otras tiendas, por lo que se puede considerar por separado para cada tienda simulación.
Tenga en cuenta que cuando la secuencia de funcionamiento simulado.

código:

#include<bits/stdc++.h>
using namespace std;
const int maxm=1e5+5;
vector<int>g[maxm];
int mark[maxm];
int a[maxm];
signed main(){
    int n,m,T;
    cin>>n>>m>>T;
    for(int i=1;i<=m;i++){
        int ts,id;
        cin>>ts>>id;
        g[id].push_back(ts);
    }
    int ans=0;
    for(int i=1;i<=n;i++){
        sort(g[i].begin(),g[i].end());
        int last=0;
        int now=0;
        int ok=0;
        for(int v:g[i]){
            if(v==last){//同一时间多个订单的情况
                now+=2;
                if(now>5)ok=1;
            }else{
                now-=(v-1)-last;
                if(now<0)now=0;
                if(now<=3)ok=0;//这个要先判断然后再+2
                now+=2;
                if(now>5)ok=1;
                last=v;
            }
        }
        now-=T-last;
        if(now<0)now=0;
        if(now<=3)ok=0;
        if(ok)ans++;
    }
    cout<<ans<<endl;
    return 0;
}

caramelo

Significado de las preguntas:

Aquí Insertar imagen Descripción

ideas:

n máximo 100, m hasta 20, o una escalera dfs binarios ciertamente no enumerados.
Máximo 20 m se encontró en el rango de tensión puede conformarse, como la presión dp considere resuelto.
Por lo que d (STA) para llegar a la sta estado requiere un número mínimo de paquetes comprados a través de cada paquete de dulces para actualizar.
En el estado inicial d (0) = 0.

código:

#include<bits/stdc++.h>
using namespace std;
const int maxm=105;
int a[maxm];
int d[1<<21];
int n,m,k;
signed main(){
    cin>>n>>m>>k;
    for(int i=1;i<=n;i++){
        int now=0;
        for(int j=1;j<=k;j++){
            int x;
            cin>>x;
            x--;
            now|=(1<<x);
        }
        a[i]=now;
    }
    for(int i=0;i<(1<<m);i++){
        d[i]=1e9;
    }
    d[0]=0;
    for(int i=1;i<=n;i++){
        for(int j=0;j<(1<<m);j++){
            if(d[j]>=n)continue;//实测这里剪一下可以快好多
            d[j|a[i]]=min(d[j|a[i]],d[j]+1);
        }
    }
    int ans=d[(1<<m)-1];
    if(ans==1e9)ans=-1;
    cout<<ans<<endl;
    return 0;
}

descifrado RSA

Significado de las preguntas:

Aquí Insertar imagen Descripción

ideas:

Debido C, n es sabido, el cálculo de la X puede obtenerse e.

Como n es conocido, y se sabe que sólo dos factores primer n p y q, es posible calcular los valores de p y q por la división de prueba a nivel local.
Calculado por p = 891234941, q = 1123984201.

Título conocido por d dividida por e (p-1) I (q-1) es el número 1, (p-1) ( q-1) , se establece en k, k = 1001733991047948000 cómputo local que ahora se conoce .
El de≡1 (k mod), mientras que la izquierda y la derecha por el elemento inverso d k d en sentido matriz -1 , la ecuación se convierte e≡d -1 (MOD k)
problema en el modo de conversión a fin de calcular d k Significados elemento inverso.

Para saber dónde el teorema de Euler:
Sea m un número entero positivo, a es un número entero y gcd (a, m) = 1 , entonces A [PHI] (m) ≡1 (MOD m)

D es conocida como el sujeto (p-1) (q- 1) primer, es decir, d primos entre sí a k, por lo que d [PHI] (k) ≡1 (MOD k), a continuación, d * d [PHI] (k) -1 ≡ 1 (mod k).
Se obtiene en el inverso elemento d k molde significado d [PHI] (k) -1 , el calculado [PHI] (k) -1 con el rápido de potencia puede entonces calcular el inverso elemento de d, es decir, e.

calcular φ local (k) es 267048288597043200.

Debido a que el cálculo de D [PHI] (k) -1 tiempo, el módulo k es relativamente grande, se echó longlongs multiplicación, por lo que necesita multiplicación rápida.
Calcular D [PHI] (K) -1 = 823816093931522017LL.

El sujeto entonces directamente ecuación C = X E MOD X n-a puede ser calculada.
Calcular X = 579706994112328949.

El uso y la función de un valor calculado en el interior de código colgante.

código:

#include<bits/stdc++.h>
using namespace std;
#define int long long
int mul(int a,int b,int mod){//快速乘
    int ans=0;
    while(b){
        if(b&1){
            ans=(ans+a)%mod;
        }
        a=(a+a)%mod;
        b>>=1;
    }
    return ans;
}
int ppow(int a,int b,int mod){//快速幂
    int ans=1%mod;
    while(b){
        if(b&1){
            ans=mul(ans,a,mod);
        }
        a=mul(a,a,mod);
        b>>=1;
    }
    return ans;
}
int phi(int n){//计算欧拉函数
    int ans=n;
    for(int i=2;i*i<=n;i++){
        if(n%i==0){
            ans=ans/i*(i-1);
            while(n%i==0)n/=i;
        }
    }
    if(n>1)ans=ans/n*(n-1);
    return ans;
}
int getprime(int n){//试除法
    for(int i=2;i*i<=n;i++){
        if(n%i==0)return i;
    }
    return 1;
}
signed main(){
    int n=1001733993063167141LL;
    int d=212353;
    int C=20190324;
    //
    int p=891234941;//p=getprime(n)
    int q=1123984201;//q=n/p
    int k=1001733991047948000LL;//k=(p-1)*(q-1)
    int phik=267048288597043200LL;//phik=phi(k)
    int invd=823816093931522017LL;//invd=ppow(d,phik-1,k)
    int e=invd;
    int X=579706994112328949LL;//X=ppow(C,e,n);
    cout<<X<<endl;
    return 0;
}

Publicados 430 artículos originales · ganado elogios 36 · Vistas a 20000 +

Supongo que te gusta

Origin blog.csdn.net/weixin_44178736/article/details/104959288
Recomendado
Clasificación