瀏覽代碼

注意日期会含当天,结果就是0。Java写会超时,改为C++可AC

爱玲姐姐 5 年之前
父節點
當前提交
9ec24cf3c2
共有 1 個文件被更改,包括 110 次插入0 次删除
  1. 110 0
      B.cpp

+ 110 - 0
B.cpp

@@ -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;
+        }
+    }
+}