Pit__Resumo de experiência

Solução de problemas

  • Ao encontrar algum n com um nível de 8 ou 10, a compressão de estado pode ser considerada .
  • Respostas dicotômicas, dp, classificação e fila são testes comuns na liga.
  • Ao enumerar as coisas, você pode fazer menos delas (quebrar no lugar certo, às vezes pode encurtar muito tempo, a peneira linear é um bom exemplo)
  • Às vezes, alguns problemas que parecem ser problemas matemáticos (problemas que estudam a natureza dos números) podem ser resolvidos com a construção inteligente de mapas e a execução do caminho mais curto.
    Também existe uma maneira de usar vários comprimentos para fazer um comprimento que não seja menor que um certo número e perguntar qual é o comprimento mínimo e qual é o caminho mais curto.
  • Ao encontrar o LCA comum de vários pontos, você só precisa executar o LCA uma vez e o LCA dos dois pontos com a menor e maior sequência dfs desses pontos.

Aspecto do jogo

  • Durante o jogo, você deve se lembrar de escrever arquivos e operar , a lição de sangue ...
  • Leia as perguntas antes de escrever o programa, pense bem depois de lê-lo, pense nos detalhes, circunstâncias especiais, etc., é melhor escrever no papel de rascunho, o programa final é muito bom.
  • Na minha opinião, é melhor digitar o programa passo a passo , ou seja, dividir todo o programa em várias partes, ajustar esta parte e então continuar a iniciar a próxima parte do programa (por exemplo, para uma questão de modelo de árvore de segmento de linha, primeiro escreva a árvore e certifique-se Depois de corrigir, escrever a modificação e, em seguida, escrever a consulta, etc. ), isso pode efetivamente evitar a situação em que o resultado de mais de cem linhas de digitação não pode ser compilado ou um loop infinito e nenhum erro pode ser encontrado, não importa o quê.
  • Se você tiver muito tempo, é melhor bater um contra o outro. Se você não conseguir pensar em uma solução correta, pegue uma série violenta de dados extremos e coloque-os no programa para julgar ~

Aspecto do código

  • Experiência pessoal NOIP2017 nos diz
    • Os dados devem ser lidos antes de processá-los. Nunca leia metade do intervalo, caso contrário, os dados ficarão desalinhados quando vários conjuntos de dados ...
    • Para comparação prescrevendo tal operação, se o quadrado não estourar por muito tempo, de preferência em ambos os lados do quadrado de comparação, doublese a precisão puder ser um problema. (Se o tamanho dos dados não estiver claro, então o uso de doubleQiuwen é possível)
  • Quando a resposta precisa ser módulo, preste atenção à subtração após a operação de subtração, primeiro pegue o módulo e depois adicione o módulo e depois vá para o módulo novamente para evitar números negativos.
  • Se você não estiver familiarizado, é melhor não recuar as linhas aleatoriamente, a precedência do operador é muito marcada ...
    aproximadamente a ordem é esta 算术运算-> 位运算-> 逻辑运算
    Anexe a tabela de precedência do operador

  • Mais uma vez, preste atenção na prioridade do cálculo . Se não funcionar, é melhor colocar parênteses :-)

  • Fila de reprodução e inicializar simplesmente l=r+1pode (se a fila estiver vazia l<=r). Hábito pessoal, se você julgar que seja ( l<r), então a inicialização tem que ser l=r.

  • Ao simular uma lista de adjacências com um array, se for um grafo não direcionado, preste atenção que as arestas devem ter mais do que o dobro do espaço.

  • Se você quiser usar definições de macro para simplificar as expressões repetitivas no código, preste atenção em adicionar parênteses à expressão inteira (a expressão inteira é adicionada parênteses para evitar problemas de prioridade no programa. Por exemplo #define Mid l+r>>1, se for escrito na árvore de segmento de linha, o conteúdo real no programa Mid+1é se torna l+r>>2了), deve ser escrito #define Mid (l+r>>1). (computação de bits com prioridade mais baixa do que a aritmética, vai dar errado)

  • Se você quiser abreviar o tipo de variável no programa, é melhor usar typedef. Usar a definição de macro #define pode ter alguns problemas menores. Exemplos específicos:typedef long long LL;

  • Ao usar hash, é melhor usar números primos incomuns como módulo (nunca use 1000000009). Por exemplo, se você descobrir que seu número QQ ou número de telefone celular é primo e o comprimento é aceitável, você pode escolhê-los.

  • Ao fazer o hash, preste atenção ao local apropriado " % ", caso contrário, ele será gg quando um número negativo aparecer . Você também pode considerar o uso de longo sem sinal . Além de ser longo o suficiente, ele irá modular automaticamente um número para você quando for reduzido a um número negativo.Parece ser 2 ^ 64,Não tenha medo do erro de números negativos.

  • Quando usado em um float, então uma alta precisão (tempo suficiente), é preferível gastar long double, é definida diretamente long doublee, em seguida, quando a intensidade de saída gira em torno doubleda linha.

  • Preste atenção à entrada e saída de palavras-chave de várias variáveis ​​em cstdio

Tipos de palavra-chave scanf palavra-chave printf Descrição
int % d % d
int não assinado % você % você
longo longo % lld % lld
% I64d
Sistema Linux sistema
Windows
longo sem sinal % hospedeiro % host
% I64u
Sistema Linux sistema
Windows
float
double
% f
% lf
Todos usam% f % .nf é manter a saída de n casas decimais
Caracteres % c % c
Caracteres[] % s % s Não há necessidade de adicionar "&" antes da matriz de caracteres, por exemplo:
scanf("%s",a)
onde a é uma matriz de caracteres (string no estilo c)

Acho que você gosta

Origin blog.csdn.net/jackypigpig/article/details/54290570
Recomendado
Clasificación