人人公司是一家极为鼓励极客精神的公司,当有重要的项目需要上线但又时间太紧,甚至需要当天上线的时候,往往会挂起海盗旗开启电子日期显示,让大家可以在对时间有更明确的感知的情况下,同心协力搞定重要的项目。海盗旗下方的电子屏显示的日期形式为 YYYYMMDD (年份占 4 位、月份占 2 位、天数占 2 位)。
日期电子屏幕上每个数字对应的显示如下图:
输入格式
从上图可以得知每个数字对应的笔画数,比如 2 的笔画数是 5,8 的笔画数是 7,等等。人人员工小明看到了项目的启动日期 d,但是项目的结束日期没看清楚,只知道电子屏幕上项目结束日期所需的笔画数为 m,你能帮小明算出来项目执行所用的时间天数么?
输入数据有多组。第一行输入一个整数 T (1 ≤ T ≤ 20),表示一共有 T 组数据。
接下来每组数据 2 行,共 T * 2 行。每组第一行输入一个长度为 8 的仅包含数字的字符串 d,表示项目的启动日期,形式为 YYYYMMDD。每组第二行输入一个非负整数 m (0 ≤ m ≤ 100),表示电子屏幕上项目结束日期所需的笔画数。输入日期保证合法。
输出格式
一共输出 T 行,每行一个整数,表示该组数据对应的项目执行所用的时间天数。如果最近的符合要求的结束日期超过 2999 年 12 月 31 日或无解则输出 -1,否则输出符合要求的最小的解。
样例1
输入:
2 20150718 30 29991231 38
输出:
85 -1
直接暴力
#include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #include<functional> #include<iostream> #include<cmath> #include<cctype> #include<ctime> using namespace std; #define For(i,n) for(int i=1;i<=n;i++) #define Fork(i,k,n) for(int i=k;i<=n;i++) #define Rep(i,n) for(int i=0;i<n;i++) #define ForD(i,n) for(int i=n;i;i--) #define RepD(i,n) for(int i=n;i>=0;i--) #define Forp(x) for(int p=pre[x];p;p=next[p]) #define Forpiter(x) for(int &p=iter[x];p;p=next[p]) #define Lson (x<<1) #define Rson ((x<<1)+1) #define MEM(a) memset(a,0,sizeof(a)); #define MEMI(a) memset(a,127,sizeof(a)); #define MEMi(a) memset(a,128,sizeof(a)); #define INF (2139062143) #define F (100000007) #define MAXT (20+10) #define MAXN (10+10 ) typedef long long ll; ll mul(ll a,ll b){return (a*b)%F;} ll add(ll a,ll b){return (a+b)%F;} ll sub(ll a,ll b){return (a-b+(a-b)/F*F+F)%F;} void upd(ll &a,ll b){a=(a%F+b%F)%F;} int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int g[20]={6,2,5,5,4,5,6,3,7,6}; int is_l(int y) { if (y%4==0&&y%100!=0) return 366; if (y%400==0) return 366;return 365; } char s[MAXN]; int A[MAXN]; int T,m; int d1,m1,Y1; void next() { if (is_l(Y1)==366) a[2]=29;else a[2]=28; d1++; if (d1>a[m1]) d1=1,m1++; if (m1>12) m1=1,Y1++; } int count() { return g[Y1/1000]+g[(Y1/100)%10]+g[(Y1/10)%10]+g[Y1%10]+g[m1/10]+g[m1%10]+g[d1/10]+g[d1%10]; } int main() { // freopen("num.in","r",stdin); // freopen("num.out","w",stdout); cin>>T; while(T--) { cin>>s>>m; Rep(i,8) A[i+1]=s[i]-'0'; Y1=A[1]*1000+A[2]*100+A[3]*10+A[4]; m1=A[5]*10+A[6]; d1=A[7]*10+A[8]; // cout<<Y1<<' '<<m1<<' '<<d1<<endl; if (m>56||m<16) { cout<<"-1"<<endl; continue; } // cout<<count()<<endl; if (m==count()) { cout<<"0"<<endl; continue; } if (Y1==2999&&m1==12&&d1==31) { cout<<"-1"<<endl;continue; } int ans=0; while (1) { next();ans++; // cout<<Y1<<' '<<m1<<' '<<d1<<endl; if (m==count()) break; if (Y1==2999&&m1==12&&d1==31) { ans=-1;break; } } cout<<ans<<endl; } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-25 17:28:01