B.cpp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int a[10] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6};
  4. int typeMonth(int m){
  5. int ret = 0;
  6. switch (m){
  7. case 1:
  8. case 3:
  9. case 5:
  10. case 7:
  11. case 8:
  12. case 10:
  13. case 12:
  14. ret = 1;
  15. break;
  16. case 4:
  17. case 6:
  18. case 9:
  19. case 11:
  20. ret = 0;
  21. break;
  22. case 2:
  23. ret = -1;
  24. break;
  25. }
  26. return ret;
  27. }
  28. bool isPrime(int y){
  29. if(y % 400 == 0)return true;
  30. if(y % 4 == 0 && y % 100 != 0)return true;
  31. return false;
  32. }
  33. struct Node{
  34. int y, m, d;
  35. Node(){}
  36. Node(int y, int m, int d):y(y), m(m), d(d){}
  37. bool operator<(const Node& o){
  38. if(y != o.y)return y < o.y;
  39. if(m != o.m)return m < o.m;
  40. return d < o.d;
  41. }
  42. void addOneDay(){
  43. int ny = y;
  44. int nm = m;
  45. int nd = d+1;
  46. if(typeMonth(m)==1){
  47. if(d == 31){
  48. nd = 1;
  49. nm++;
  50. if(nm==13){
  51. ny ++;
  52. nm = 1;
  53. }
  54. }
  55. }else if(typeMonth(m)==0){
  56. if(d == 30){
  57. nd = 1;
  58. nm++;
  59. }
  60. }else{
  61. if(isPrime(y)){
  62. if(d == 29){
  63. nd = 1;
  64. nm++;
  65. }
  66. }else {
  67. if(d == 28){
  68. nd = 1;
  69. nm ++;
  70. }
  71. }
  72. }
  73. y = ny;
  74. m = nm;
  75. d = nd;
  76. }
  77. int getNumber(){
  78. return a[y/1000] + a[y%1000/100] + a[y%100/10] + a[y%10] + a[m/10] + a[m%10] + a[d/10] + a[d%10];
  79. }
  80. };
  81. int n;
  82. string s;
  83. Node Stime,Etime;
  84. int main() {
  85. int t;
  86. cin >> t;
  87. while(t--){
  88. cin >> s;
  89. cin >> n;
  90. int y = (s[0]-'0')*1000 + (s[1]-'0')*100 + (s[2]-'0')*10 + (s[3]-'0');
  91. int m = (s[4]-'0')*10 + (s[5]-'0');
  92. int d = (s[6]-'0')*10 + (s[7]-'0');
  93. Stime = Node(y, m, d);
  94. Etime = Node(3000, 01, 01);
  95. int i = 0;
  96. bool f = false;
  97. while(Stime < Etime){
  98. if(Stime.getNumber() == n){
  99. f = true;
  100. cout << i << endl;
  101. break;
  102. }
  103. i++;
  104. Stime.addOneDay();
  105. }
  106. if(!f){
  107. cout << -1 << endl;
  108. }
  109. }
  110. }