Ronda # 628 (div2)

A. EHAB y LOs GCD

Significado de las preguntas:

Se le da un número entero positivo \ (x \) . Encuentra cualquier tales \ (2 \) números enteros positivos \ (a \) y \ (b \) de tal manera que \ (GCD (a, b) + LCM (a, b) = x \)

for _ in range(int(input())):
    x = int(input())
    print(*[1,x-1])

B. CopyCopyCopyCopyCopy

Significado de las preguntas:

Una secuencia puede ser replicado varias veces, pidiendo LIS más largas

for _ in range(int(input())):
    ans = set()
    n = int(input())
    L = list(map(int,input().split()))
    for i in L:
        ans.add(i)
    print(len(ans))

C. Ehab y MEXS PATH-etic

Significado de las preguntas :

A un árbol, el lado derecho de la petición de asignación a \ (0 \) a \ (n- 2 \) , por lo que \ (MEX (u, v) \) del valor máximo del mínimo

\ (MEX (u, v) \) representa no aparece en \ (U \) a \ (V \) el valor mínimo de los pesos de trayectoria

ideas:

Si el nodo es mayor que igual a \ (3 \) , a partir de \ (0 \) comienza lado derecho están dispuestos en orden, para que cualquier camino no puede ocurrir simultáneamente \ (0 \) , \ (1 \) , \ ( 2 \)

\ (MEX (u, v) \) no será mayor que \ (2 \)

Si no, entonces una cadena, dispuesto al azar

#include<bits/stdc++.h>
using namespace std;

const int maxn = 1e5 + 10;

int deg[maxn];
pair<int,int>Edge[maxn];

int main(){
    int n;scanf("%d",&n);
    for(int i = 0;i < n - 1;i++){
        scanf("%d%d",&Edge[i].first,&Edge[i].second);
        deg[Edge[i].first]++;deg[Edge[i].second]++;
    }
    int k = -1;
    for(int i = 1;i <= n;i++){
        if(deg[i] >= 3){
            k = i;
            break;
        }
    }
    if(k == -1){
        for(int i = 0;i < n - 1;i++){
            printf("%d\n",i);
        }
    }
    else{
        int t = deg[k];
        int x = 0;
        for(int i = 0;i < n - 1;i++){
            if(Edge[i].first == k || Edge[i].second == k){
                printf("%d\n",x++);
            }
            else{
                printf("%d\n",t++);
            }
        }
    }
}

D. Ehab la Xorcist

Significado de las preguntas:

Para \ (U \) y \ (V \) , o de diferentes números de todas las \ (U \) y como \ (V \) matriz más corta

ideas:

Si \ (T> v \) , no hay solución.

Orden \ (T = V - T \) , la \ (T \) se dividió en dos números, si el \ (T \) es impar, no hay solución

Dividir en \ (U, K, K \) , donde \ (2k = t \)

En el bit correspondiente de cada uno de lado extraídos.

#include<bits/stdc++.h>
using namespace std;


int bit[2000];

void init(long long u,long long t){
    int now = 0;
    while(u){
        if(u&1ll){
            bit[now]++;
        }
        u >>= 1ll;
        now++;
    }

    now = 0;
    while(t){
        if(t&1ll){
            bit[now]+=2;
        }
        t >>= 1ll;
        now++;
    }
}
int main(){
    long long u,v;
    cin >> u >> v;
    if(u == v && u == 0){
        cout << 0 << endl;
        return 0;
    }
    if(u > v || ((v - u) & 1)){
        cout << - 1 << endl;
    }
    else{
        init(u,v-u>>1ll);
        vector<long long>ans;

        int ok = 1;
        while(ok){
            long long t = 0;
            for(int i = 0;i < 200;i++){
                if(bit[i]){
                    bit[i]--;
                    t += (1ll << i);
                }
            }
            if(t == 0){
                ok = false;
            }
            else{
                ans.push_back(t);
            }
        }
        cout << ans.size() << endl;
        for(int i = 0;i < ans.size();i++){
            cout << ans[i] << " ";
        }
    }
}

Supongo que te gusta

Origin www.cnblogs.com/sduwh/p/12505368.html
Recomendado
Clasificación