zoukankan      html  css  js  c++  java
  • D

    题目链接:

    D - The Lucky Week

     ZOJ - 3939 

    题目大意:幸运的星期指,星期一为每个月的1 or 11 or 21号。给出第一个幸运星期的时间,问从当前的日起开始。第n个的日期。

    具体思路:我们通过打表可以发现,每隔400年,当前的这一天的星期和400年后的是相同的。所以我们先求出一个400年有多少个幸运的天数(1600-1999),然后判断当前的年份如果以1600年开始的话,往后n个幸运日是多少,然后再做差以原来的起点输出就可以了。

    AC代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 # define ll long long
     4 # define inf 0x3f3f3f3f
     5 const int maxn = 2e6+100;
     6 struct node
     7 {
     8     ll  y,m,d;
     9     node() {}
    10     node(ll xx,ll yy,ll zz)
    11     {
    12         y=xx;
    13         m=yy;
    14         d=zz;
    15     }
    16 } ;
    17 //bool check(ll y,ll m,ll d)
    18 //{
    19 //    ll a;
    20 //    if(m==1||m==2)
    21 //    {
    22 //        m+=12;
    23 //        y--;
    24 //    }
    25 //    if((y<1752)||(y==1752&&m<9)||(y==1752&&m==9&&d<3))
    26 //        a=(d+2*m+3*(m+1)/5+y+y/4+5)%7;
    27 //    else
    28 //        a=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
    29 //    if(a==0)
    30 //        return true;
    31 //    return false;
    32 //}
    33 bool check(int year,int month,int day)
    34 {
    35     if(month < 3) { year -= 1;  month += 12; }
    36     int c = int (year / 100), y = year - 100 * c;
    37     int w = int ( c / 4) - 2 * c + y + int ( y / 4 ) +(26 * ( month + 1 ) / 10) + day - 1;
    38     w = (w % 7 + 7) % 7;
    39 
    40     if (w == 1) return 1;
    41     else return 0;
    42 }
    43 vector<node>q;
    44 map<ll,ll>vis;
    45 void init(){
    46 for(ll i=1600;i<=1600+400-1;i++){
    47 for(ll j=1;j<=12;j++){
    48 if(check(i,j,1)){
    49 q.push_back(node(i,j,1));
    50 vis[i*1000+j*100+1]=q.size()-1;
    51 }
    52 if(check(i,j,11)){
    53 q.push_back(node(i,j,11));
    54 vis[i*1000+j*100+11]=q.size()-1;
    55 }
    56 if(check(i,j,21)){
    57 q.push_back(node(i,j,21));
    58 vis[i*1000+j*100+21]=q.size()-1;
    59 }
    60 }
    61 }
    62 }
    63 int main()
    64 {
    65     init();
    66     int T;
    67     scanf("%lld",&T);
    68     while(T--)
    69     {
    70        ll y,m,d,n;
    71         scanf("%lld %lld %lld %lld",&y,&m,&d,&n);
    72         ll tmp1,tmp2;
    73         tmp1=(y-1600)%400+1600;
    74         tmp2=tmp1*1000+m*100+d;
    75         int pos=vis[tmp2];
    76         int t1=(pos+n-1)%q.size();
    77         int t2=(pos+n-1)/q.size();
    78         printf("%lld %lld %lld
    ",y+q[t1].y-q[pos].y+t2*400,q[t1].m,q[t1].d);
    79     }
    80     return 0;
    81 }

     

  • 相关阅读:
    ul 和 ol 标签的相关设置
    程序员送给大学生弟弟的话
    react-dom.js 源码
    什么是 JSX
    The 2019 ICPC China Nanchang National Invitational and International Silk-Road Programming Contest C. Xyjj’s sequence(动态规划+欧拉降幂)
    Codeforces Round #584 E2. Rotate Columns (hard version)(状压DP)
    P3343 [ZJOI2015]地震后的幻想乡(概率dp+状压dp)
    Educational Codeforces Round 73 (Rated for Div. 2) D. Make The Fence Great Again
    红蓝字符串 牛客网
    Wannafly挑战赛6 锁
  • 原文地址:https://www.cnblogs.com/letlifestop/p/10684937.html
Copyright © 2011-2022 走看看