zoukankan      html  css  js  c++  java
  • 计蒜客 428(人人都有极客精神-日期问题)

    人人公司是一家极为鼓舞极客精神的公司,当有重要的项目须要上线但又时间太紧,甚至须要当天上线的时候,往往会挂起海盗旗开启电子日期显示。让大家能够在对时间有更明白的感知的情况下,同心协力搞定重要的项目。海盗旗下方的电子屏显示的日期形式为 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;
    }
    





  • 相关阅读:
    【Day1】1.了解Python
    fastadmin 隐藏操作栏按钮
    fastadmin中上传配置
    第 2 讲高等数学—两个重要的极限定理(万门大学)
    第 1 讲高等数学—元素和极限(万门大学)
    人工智能如何改变我们的未来生活
    fastadmin 中的日期时间,日期时间范围范围插件和key-value插件
    fastadmin 金额 字段类型及html验证
    51nod 1051 最大子矩阵和(DP)
    codforces 1C Ancient Berland Circus(几何)
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/6784642.html
Copyright © 2011-2022 走看看