fork download
  1. /*
  2. Deoarece se apropie Craciunul cu pasi repezi, Petrica vrea sa fie mai bun.
  3. Lui ii plac problemele cu limita de timp mare asa ca el vrea sa gaseasca cel
  4. mai mic numar format doar cu cifrele 2, 3, 5 si 7 care da restul N la impartirea
  5. cu P.
  6.  
  7. Input:
  8. Fişierul de intrare cifre4.in contine pe prima linie un numar natural T
  9. ce semnifica numarul de teste. Pe urmatoarele T linii se afla cate doua
  10. numere naturale N si P, cu semnificatia din enunt.
  11.  
  12. Output:
  13. În fişierul de ieşire cifre4.out se vor afla T linii, pe linia i se va
  14. afla raspunsul pentru al i-lea test, sau -1 in cazul in care nu exista solutie.
  15.  
  16. Restrictii:
  17. T = 5
  18. 1 ≤ P ≤ 5 * 106
  19. 1 ≤ N ≤ P - 1
  20.  
  21. Example:
  22.  
  23. Input:
  24.  
  25.   3
  26.  
  27.   52 100
  28.  
  29.   11 100
  30.  
  31.   51 1123
  32.  
  33. Output:
  34.  
  35.   52
  36.  
  37.   -1
  38.  
  39.   322352
  40.  
  41. */
  42. #include <iostream>
  43. #define FIN "cifre4.in"
  44. #define FOUT "cifre4.out"
  45.  
  46. using namespace std;
  47.  
  48. int arr[4] = {2, 3, 5, 7}, sol[100];
  49.  
  50. int numTests;
  51.  
  52. long long p[6], q[6], good[10];
  53.  
  54. void check(int len) {
  55.  
  56. long long x = 0;
  57.  
  58. for(int i = 0; i < len; i++) {
  59.  
  60. x = x * 10 + sol[ i ];
  61. }
  62.  
  63. for(int i = 0; i < numTests; ++i) {
  64.  
  65. if( good[ i ] == -1 )
  66.  
  67. if( x % q[ i ] == p[ i ] ) good[i] = x;
  68. }
  69. }
  70.  
  71. void back(int pos, int len) {
  72.  
  73. if(pos == len) {
  74.  
  75. check(len);
  76.  
  77. return;
  78.  
  79. } else {
  80.  
  81. for(int j = 0; j < 4; ++j) {
  82.  
  83. sol[pos] = arr[j];
  84.  
  85. back(pos+1, len);
  86. }
  87. }
  88. }
  89.  
  90. int main(int argc, char const *argv[]) {
  91.  
  92. //freopen(FIN, "r", stdin);
  93.  
  94. //freopen(FOUT, "w", stdout);
  95.  
  96. scanf("%d", &numTests);
  97.  
  98. for(int i = 0; i < numTests; ++i) scanf("%lld %lld", &p[i], &q[i]), good[i] = -1;
  99.  
  100. for(int i = 1; i <= 12; ++i) {
  101.  
  102. back(0, i);
  103. }
  104.  
  105. for(int i = 0; i < numTests; ++i) cout<<good[i]<<"\n";
  106.  
  107. return 0;
  108. }
  109.  
Success #stdin #stdout 0.67s 5500KB
stdin
3
52 100
11 100
51 1123
stdout
52
-1
322352