#pragma GCC optimize ("Ofast")
#include<bits/stdc++.h>
using namespace std;
template < class T> inline int isLeapYear( const T y) {
if ( y% 4 ) {
return 0 ;
}
if ( y% 100 ) {
return 1 ;
}
if ( y% 400 ) {
return 0 ;
}
return 1 ;
}
inline long long dayIndex( long long y, int m, int d) {
static int sm[ 13 ] = { 0 , 0 , 31 , 59 , 90 , 120 , 151 , 181 , 212 , 243 , 273 , 304 , 334 } ;
long long p;
long long res = 1 ;
p = ( y- 1 ) / 400 ;
res + = p * 146097 ;
y - = p * 400 ;
res + = ( y- 1 ) * 365 + ( y- 1 ) / 4 - ( y- 1 ) / 100 + sm[ m] + d- 1 ;
if ( m >= 3 && isLeapYear( y) ) {
res++ ;
}
return res;
}
#define main dummy_main
int main( ) {
return 0 ;
}
#undef main
class Solution{
public :
int daysBetweenDates( string date1, string date2) {
int y1;
int y2;
int m1;
int m2;
int d1;
int d2;
sscanf ( date1.c_str ( ) , "%d-%d-%d" , & y1, & m1, & d1) ;
sscanf ( date2.c_str ( ) , "%d-%d-%d" , & y2, & m2, & d2) ;
return abs ( dayIndex( y1,m1,d1) - dayIndex( y2,m2,d2) ) ;
}
}
;
// cLay varsion 20200227-1
// --- original code ---
// #define main dummy_main
// {}
// #undef main
//
// class Solution {
// public:
// int daysBetweenDates(string date1, string date2) {
// int y1, y2, m1, m2, d1, d2;
// sscanf(date1.c_str(), "%d-%d-%d", &y1, &m1, &d1);
// sscanf(date2.c_str(), "%d-%d-%d", &y2, &m2, &d2);
// return abs( dayIndex(y1,m1,d1) - dayIndex(y2,m2,d2) );
// }
// };
I3ByYWdtYSBHQ0Mgb3B0aW1pemUgKCJPZmFzdCIpCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnRlbXBsYXRlPGNsYXNzIFQ+IGlubGluZSBpbnQgaXNMZWFwWWVhcihjb25zdCBUIHkpewogIGlmKHklNCl7CiAgICByZXR1cm4gMDsKICB9CiAgaWYoeSUxMDApewogICAgcmV0dXJuIDE7CiAgfQogIGlmKHklNDAwKXsKICAgIHJldHVybiAwOwogIH0KICByZXR1cm4gMTsKfQppbmxpbmUgbG9uZyBsb25nIGRheUluZGV4KGxvbmcgbG9uZyB5LCBpbnQgbSwgaW50IGQpewogIHN0YXRpYyBpbnQgc21bMTNdID0gezAsIDAsIDMxLCA1OSwgOTAsIDEyMCwgMTUxLCAxODEsIDIxMiwgMjQzLCAyNzMsIDMwNCwgMzM0fTsKICBsb25nIGxvbmcgcDsKICBsb25nIGxvbmcgcmVzID0gMTsKICBwID0gKHktMSkgLyA0MDA7CiAgcmVzICs9IHAgKiAxNDYwOTc7CiAgeSAtPSBwICogNDAwOwogIHJlcyArPSAoeS0xKSAqIDM2NSArICh5LTEpIC8gNCAtICh5LTEpIC8gMTAwICsgc21bbV0gKyBkLTE7CiAgaWYobSA+PSAzICYmIGlzTGVhcFllYXIoeSkpewogICAgcmVzKys7CiAgfQogIHJldHVybiByZXM7Cn0KI2RlZmluZSBtYWluIGR1bW15X21haW4KaW50IG1haW4oKXsKICByZXR1cm4gMDsKfQojdW5kZWYgbWFpbgpjbGFzcyBTb2x1dGlvbnsKICBwdWJsaWM6CiAgaW50IGRheXNCZXR3ZWVuRGF0ZXMoc3RyaW5nIGRhdGUxLCBzdHJpbmcgZGF0ZTIpewogICAgaW50IHkxOwogICAgaW50IHkyOwogICAgaW50IG0xOwogICAgaW50IG0yOwogICAgaW50IGQxOwogICAgaW50IGQyOwogICAgc3NjYW5mKGRhdGUxLmNfc3RyKCksICIlZC0lZC0lZCIsICZ5MSwgJm0xLCAmZDEpOwogICAgc3NjYW5mKGRhdGUyLmNfc3RyKCksICIlZC0lZC0lZCIsICZ5MiwgJm0yLCAmZDIpOwogICAgcmV0dXJuIGFicyggZGF5SW5kZXgoeTEsbTEsZDEpIC0gZGF5SW5kZXgoeTIsbTIsZDIpICk7CiAgfQp9CjsKLy8gY0xheSB2YXJzaW9uIDIwMjAwMjI3LTEKCi8vIC0tLSBvcmlnaW5hbCBjb2RlIC0tLQovLyAjZGVmaW5lIG1haW4gZHVtbXlfbWFpbgovLyB7fQovLyAjdW5kZWYgbWFpbgovLyAKLy8gY2xhc3MgU29sdXRpb24gewovLyBwdWJsaWM6Ci8vICAgaW50IGRheXNCZXR3ZWVuRGF0ZXMoc3RyaW5nIGRhdGUxLCBzdHJpbmcgZGF0ZTIpIHsKLy8gICAgIGludCB5MSwgeTIsIG0xLCBtMiwgZDEsIGQyOwovLyAgICAgc3NjYW5mKGRhdGUxLmNfc3RyKCksICIlZC0lZC0lZCIsICZ5MSwgJm0xLCAmZDEpOwovLyAgICAgc3NjYW5mKGRhdGUyLmNfc3RyKCksICIlZC0lZC0lZCIsICZ5MiwgJm0yLCAmZDIpOwovLyAgICAgcmV0dXJuIGFicyggZGF5SW5kZXgoeTEsbTEsZDEpIC0gZGF5SW5kZXgoeTIsbTIsZDIpICk7Ci8vICAgfQovLyB9Owo=