[Algoritmo] - inclusão e exclusão

princípio da inclusão-exclusão

A idéia básica: FIG aqui como exemplo levá-la
Aqui Insert Picture Descrição
de que sabemos o número de conjunto de dados A, B, C, e gostaria de obter o tamanho A∩B∩C
1. Nós primeiro determinado o tamanho do A + B + C, mas neste momento 2, 4, 6 das duas regiões é calculada, a área calculada 5 3
2. por isso, deve ser calculada subtraindo-se a pluralidade
A∩B∩C = a + B + C - B∩C - A∩C - A∩ B (zona 5 neste momento foi calculada subtraindo-se três vezes, três vezes) + A∩B∩C (zona 5 deve ser adicionado em último lugar)

Exemplos MDL Gugu Gu

título Descrição

Após o aluguer crianças última MDL para ajudá-la levar itens, a comissão não tem (doces) para crianças. Esta colocar as crianças ansiosas. A fim de obter de volta o doce, as crianças decidiu ir onda gank de MDL, MDL também é muito embaraçado.
Mas MDL não podia pagar qualquer doce, por isso decidiu esconder por um tempo, desespero, decidiu levar seus filhos 10 ^ 9 pequenos parceiros para MDL gank.
Então MJJ parceiro MDL Júnior disse: "MDL Mo pânico, eu tenho três pomba mágica, respectivamente, em cima de um número primo, então esse número pode ser números divisíveis acima pessoas em pombo, de modo que você pode reduzir significativamente seus números ! "(10 ^ 9 realizado por crianças individuais são numeradas de 1 a 10 ^ 9), mas por causa de todas as crianças não podem se tornar uma pomba, MDL mão de obra necessária para se preparar?

Entrada

A primeira linha contém um número inteiro positivo T (T <200 é),
linha T após cada linha contém três números inteiros positivos, a, b, c (2 <= a, b, c <106 ;! A = B, b! ! = c, c = a; garantia a, b, c é um número primo),
que representam os três números mágicos de pombos.

Resultado

Correspondendo a cada um dos níveis de interesse número MDL do número de linha para cada resultado de saída.
código de linguagem C

#include <stdio.h>
#include <math.h> //pow函数的头文件

int main(void)
{
    int t, ans, sum, a, b, c;//ans用于统计变成鸽子的数目,sum为全体小朋友,ans-sum即为所求
    scanf("%d", &t);
    while(t--)
    {
        scanf("%d%d%d", &a, &b, &c);
        ans = 0, sum = pow(10, 9);
        ans += sum/a,ans += sum/b, ans += sum/c;//ans用于统计a, b, c倍数的个数,相当于算法中A+B+C的数量
        ans -= sum/(a*b), ans -= sum/(a*c), ans -= sum/(b*c);//ans此时相当于算法中A+B+C - B∩C - A∩C - A∩B
        ans += sum/(a*b*c);//ans相当于算法中A+B+C - B∩C - A∩C - A∩B + A∩B∩C 也就是变成鸽子的数量
        printf("%d\n", sum-ans);
    }
    return 0;
}

Publicado 20 artigos originais · ganhou elogios 2 · Visualizações 946

Acho que você gosta

Origin blog.csdn.net/zhbbbbbb/article/details/103428890
Recomendado
Clasificación