Advertisement
vitormartinotti

OBI 2021 CASAMENTO

Sep 19th, 2023 (edited)
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.14 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. char n1[10000010], n2[10000010];
  6.  
  7. char resp1[20], resp2[20];
  8.  
  9. int main() {
  10.  
  11.     scanf(" %s %s", n1, n2);
  12.  
  13.     //A posição a ser eliminada recebe -1
  14.     int t1 = strlen(n1) - 1, t2 = strlen(n2) - 1;
  15.     while(t1 >= 0 && t2 >= 0){
  16.         if(n1[t1] > n2[t2]) n2[t2] = -1;
  17.         else if(n1[t1] < n2[t2]) n1[t1] = -1;
  18.         t1--;
  19.         t2--;
  20.     }
  21.  
  22.     //Anexa no vetor "resposta" os números diferentes de -1
  23.     t1 = 0;
  24.     for(int i = 0; i < strlen(n1); i++){
  25.         if(n1[i] != -1){
  26.             resp1[t1] = n1[i];
  27.             t1++;
  28.         }
  29.     }
  30.     if(t1 == 0) printf("-1");
  31.     resp1[t1] = '\0';
  32.  
  33.     t2 = 0;
  34.     for(int i = 0; i < strlen(n2); i++){
  35.         if(n2[i] != -1){
  36.             resp2[t2] = n2[i];
  37.             t2++;
  38.         }
  39.     }
  40.     if(t2 == 0) printf("-1");
  41.     resp2[t2] = '\0';
  42.  
  43.     //Eventualmente o resp pode ser uma string de 0's, assim, queremos apenas um 0
  44.     //Calcula quantos zeros resp1 possuí
  45.     int zeros = 0;
  46.     for(int i = 0; i < strlen(resp1); i++){
  47.         if(resp1[i] == '0') zeros++;
  48.     }
  49.     //Se a quantidade de zeros é igual ao tamanho do número, significa que ele é composto só de zeros e deve ser transformado em 0 (um único 0).
  50.     if(zeros > 0 && zeros == strlen(resp1)){
  51.         resp1[0] = '0';
  52.         resp1[1] = '\0';
  53.     }
  54.  
  55.     //Mesmo processo, só que para resp2
  56.     zeros = 0;
  57.     for(int i = 0; i < strlen(resp2); i++){
  58.         if(resp2[i] == '0') zeros++;
  59.     }
  60.     if(zeros > 0 && zeros == strlen(resp2)){
  61.         resp2[0] = '0';
  62.         resp2[1] = '\0';
  63.     }
  64.  
  65.     //Retorna na saída primeiro o número com menor quantidade de dígitos
  66.     if(strlen(resp1) > strlen(resp2)) printf("%s %s", resp2, resp1);
  67.     else if(strlen(resp2) > strlen(resp1)) printf("%s %s", resp1, resp2);
  68.     //Se a quantidade de dígitos for igual, é preciso ver quem é maior lexicograficamente.
  69.     else{
  70.         if(strcmp(resp1, resp2) < 0) printf("%s %s", resp1, resp2);
  71.         else if(strcmp(resp1, resp2) > 0) printf("%s %s", resp2, resp1);
  72.         else printf("%s %s", resp1, resp2);
  73.     }
  74.  
  75.     return 0;
  76. }
  77.  
Tags: OBI
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement