【CCF CSP】201712

201712

  1. 一波排序加遍历
  2. 模拟

  3. (1) 先贴一个hin简单的问题,但码程序依旧再犯,太辣鸡了。。。。
bool res[10];

int fac(bool *a)
{
    return sizeof(a)/sizeof(bool);
}

int main()
{
    cout<<"1:"<<sizeof(res)/sizeof(bool)<<endl;
    cout<<"2:"<<fac(res)<<endl;
}

对于上面的代码,输出是酱婶儿的:

1:10
2:4
当把bool数组改成int时,输出为1:10 2:1

emm,虽然早先上c++课程时,就知道了其实传的是地址,但是码程序的时候还是忘记了~

fac函数中的 a 的类型是(int*),因此是4B。

但是当数组是作为引用传入函数时,此时它的特性和原定义函数的特性都相同,也即sizeof()的值也将相同。

详细讲解可至【C++】数组作为参数传递的那些事儿

(2)对于自己敲,我只能说我尽力了,笑哭.jpg。
因此此处贴上其他大佬的代码: 201712-3 Crontab ccf
(3)另一份启蒙

#include <bits/stdc++.h>
using namespace std;

char s[22],t[22];
map<string,int> _weekday,_month;

void init()
{
    _weekday["sun"]=0;_weekday["mon"]=1;_weekday["tue"]=2;_weekday["wed"]=3;
    _weekday["thu"]=4;_weekday["fri"]=5;_weekday["sat"]=6;
    _month["jan"]=1;_month["feb"]=2;_month["mar"]=3;_month["apr"]=4;
    _month["may"]=5;_month["jun"]=6;_month["jul"]=7;_month["aug"]=8;
    _month["sep"]=9;_month["oct"]=10;_month["nov"]=11;_month["dec"]=12;
}

int to_int(char s[],int len,int k)
{
    int x;
    if (k==1||(s[0]>='0'&&s[0]<='9')) {
        x=0;
        for (int i=0;i<len;i++) {
            x=x*10+s[i]-'0';
        }
        return x;
    }
    char c=s[len];
    for (int i=0;i<len;i++) {
        if (s[i]<'a') s[i]+='a'-'A';
    }
    s[len]=0;
    string t(s);
    if (k==2) x=_month[t];
    else x=_weekday[t];
    s[len]=c;
    return x;
}

void to_intrange(char s[],int len,bool a[],int k)
{
    int p=0;
    while (p<len&&s[p]!='-') ++p;
    int x,y;
    if (p==len) {
        x=to_int(s,len,k);
        a[x]=true;
    } else {
        x=to_int(s,p,k);
        y=to_int(s+p+1,len-p-1,k);
        while (x<=y) a[x++]=true;
    }
}

void to_intmap(char s[],bool a[],int sz,int k)
{
    if (s[0]=='*') {
        for (int i=0;i<sz;i++) a[i]=true;
        return;
    }
    int p=0,st=0;
    while (true) {
        while (s[p]&&s[p]!=',') ++p;
        to_intrange(s+st,p-st,a,k);
        if (!s[p]) break;
        st=++p;
    }
}

struct Crontab {
    bool MM[60],HH[24],dd[32],mm[13],ww[7];
    char comm[111];
} c[22];

int zeller(int y,int m,int d)
{
    if (m<=2) y-=1,m+=12;
    int c=y/100; y-=c*100;
    int wd=(c/4)-2*c+(y+y/4)+(13*(m+1)/5)+d+6;
    return wd%7;
}

int days[15]={0,31,28,31,30,31,30,31,31,30,31,30,31};

bool leap(int y)
{
    return y%400==0||(y%100!=0&&y%4==0);
}

int month_day(int y,int m)
{
    if (m!=2) return days[m];
    return days[m]+leap(y);
}

struct Scher {
    int yy,mm,dd,HH,MM,ww;
    Scher(char s[]) {
        yy=mm=dd=HH=MM=ww=0;
        for (int i=0;i<4;i++) yy=yy*10+s[i]-'0';
        for (int i=4;i<6;i++) mm=mm*10+s[i]-'0';
        for (int i=6;i<8;i++) dd=dd*10+s[i]-'0';
        for (int i=8;i<10;i++) HH=HH*10+s[i]-'0';
        for (int i=10;i<12;i++) MM=MM*10+s[i]-'0';
        ww=zeller(yy,mm,dd);
    }
    void inc() {
        if (++MM==60) {
            MM=0;
            if (++HH==24) {
                HH=0;
                if (++ww==7) ww=0;
                if (++dd==month_day(yy,mm)+1) {
                    dd=1;
                    if (++mm==12+1) {
                        mm=1;
                        ++yy;
                    }
                }
            }
        }
    }
    bool operator==(const Scher &R) const {
        return yy==R.yy&&mm==R.mm&&dd==R.dd&&HH==R.HH&&MM==R.MM;
    }
};

int main()
{
    init();
    int n;
    scanf("%d%s%s",&n,s,t);
    Scher S(s),T(t);
    for (int i=1;i<=n;i++) {
        scanf("%s",s);
        to_intmap(s,c[i].MM,sizeof(c[i].MM)/sizeof(bool),1);
        scanf("%s",s);
        to_intmap(s,c[i].HH,sizeof(c[i].HH)/sizeof(bool),1);
        scanf("%s",s);
        to_intmap(s,c[i].dd,sizeof(c[i].dd)/sizeof(bool),1);
        scanf("%s",s);
        to_intmap(s,c[i].mm,sizeof(c[i].mm)/sizeof(bool),2);
        scanf("%s",s);
        to_intmap(s,c[i].ww,sizeof(c[i].ww)/sizeof(bool),3);
        scanf("%s",c[i].comm);
    }
    while (!(S==T)) {
        for (int i=1;i<=n;i++) {
            if (!c[i].MM[S.MM]||!c[i].HH[S.HH]) continue;
            if (!c[i].dd[S.dd]||!c[i].ww[S.ww]||!c[i].mm[S.mm]) continue;
            printf("%04d%02d%02d%02d%02d %s\n",S.yy,S.mm,S.dd,S.HH,S.MM,c[i].comm);
        }
        S.inc();
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_34898866/article/details/79592172