|
@@ -0,0 +1,110 @@
|
|
|
+#include <bits/stdc++.h>
|
|
|
+using namespace std;
|
|
|
+int a[10] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6};
|
|
|
+int typeMonth(int m){
|
|
|
+ int ret = 0;
|
|
|
+ switch (m){
|
|
|
+ case 1:
|
|
|
+ case 3:
|
|
|
+ case 5:
|
|
|
+ case 7:
|
|
|
+ case 8:
|
|
|
+ case 10:
|
|
|
+ case 12:
|
|
|
+ ret = 1;
|
|
|
+ break;
|
|
|
+ case 4:
|
|
|
+ case 6:
|
|
|
+ case 9:
|
|
|
+ case 11:
|
|
|
+ ret = 0;
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ ret = -1;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ return ret;
|
|
|
+}
|
|
|
+bool isPrime(int y){
|
|
|
+ if(y % 400 == 0)return true;
|
|
|
+ if(y % 4 == 0 && y % 100 != 0)return true;
|
|
|
+ return false;
|
|
|
+}
|
|
|
+struct Node{
|
|
|
+ int y, m, d;
|
|
|
+ Node(){}
|
|
|
+ Node(int y, int m, int d):y(y), m(m), d(d){}
|
|
|
+ bool operator<(const Node& o){
|
|
|
+ if(y != o.y)return y < o.y;
|
|
|
+ if(m != o.m)return m < o.m;
|
|
|
+ return d < o.d;
|
|
|
+ }
|
|
|
+ void addOneDay(){
|
|
|
+ int ny = y;
|
|
|
+ int nm = m;
|
|
|
+ int nd = d+1;
|
|
|
+ if(typeMonth(m)==1){
|
|
|
+ if(d == 31){
|
|
|
+ nd = 1;
|
|
|
+ nm++;
|
|
|
+ if(nm==13){
|
|
|
+ ny ++;
|
|
|
+ nm = 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else if(typeMonth(m)==0){
|
|
|
+ if(d == 30){
|
|
|
+ nd = 1;
|
|
|
+ nm++;
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ if(isPrime(y)){
|
|
|
+ if(d == 29){
|
|
|
+ nd = 1;
|
|
|
+ nm++;
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ if(d == 28){
|
|
|
+ nd = 1;
|
|
|
+ nm ++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ y = ny;
|
|
|
+ m = nm;
|
|
|
+ d = nd;
|
|
|
+ }
|
|
|
+ int getNumber(){
|
|
|
+ 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];
|
|
|
+ }
|
|
|
+};
|
|
|
+int n;
|
|
|
+string s;
|
|
|
+Node Stime,Etime;
|
|
|
+int main() {
|
|
|
+ int t;
|
|
|
+ cin >> t;
|
|
|
+ while(t--){
|
|
|
+ cin >> s;
|
|
|
+ cin >> n;
|
|
|
+ int y = (s[0]-'0')*1000 + (s[1]-'0')*100 + (s[2]-'0')*10 + (s[3]-'0');
|
|
|
+ int m = (s[4]-'0')*10 + (s[5]-'0');
|
|
|
+ int d = (s[6]-'0')*10 + (s[7]-'0');
|
|
|
+ Stime = Node(y, m, d);
|
|
|
+ Etime = Node(3000, 01, 01);
|
|
|
+ int i = 0;
|
|
|
+ bool f = false;
|
|
|
+ while(Stime < Etime){
|
|
|
+ if(Stime.getNumber() == n){
|
|
|
+ f = true;
|
|
|
+ cout << i << endl;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ i++;
|
|
|
+ Stime.addOneDay();
|
|
|
+ }
|
|
|
+ if(!f){
|
|
|
+ cout << -1 << endl;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|