ZOJ 3785 11th省赛 J What day is that day?【打表找规律】

博客分享了ZOJ 3785题目的解决过程,通过打表和暴力查找揭示了问题中294天的循环规律。作者在比赛中因未能找到此规律而多次尝试失败。

题目链接

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5272

思路

就是说今天是星期六,问 11+22+33+44+...nn 天后是星期几。
打个表找规律吧,暴力查找下发现循环节是294。
比赛时没往这方面想,以为是递推关系,然后T了无数遍最后还是没做出来,唉总归是题目做的太少了。

以下是打表+暴力找循环节的代码:

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

int a[1000000+100],p=0;
int main()
{
    //freopen("out.txt","w",stdout);
    int sum=0;
    for(int i=1 ; i<=10000 ; ++i)
    {
        int fac=1;
        for(int j=0 ; j<i ; ++j)
        {
            fac*=i;
            fac%=7;
        }
        sum+=fac;
        sum%=7;
        int ans[]={6,0,1,2,3,4,5};
        //printf(",%d",ans[sum]);
        a[p++]=ans[sum];
    }
    for(int r=2 ; r<=1000 ; ++r)
    {
        bool flag=1;
        for(int i=0 ; i<r ; ++i)
        {
            if(a[i]!=a[i+r])
            {
                flag=0;
                break;
            }
        }
        if(flag)printf("success!!!!::%d\n",r);
    }
    return 0;
}

AC代码

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

int a[]={-1,0,4,3,0,3,4,4,5,6,3,5,6,5,5,6,1,6,0,5,6,6,0,4,5,2,6,5,5,6,0,3,5,4,5,5,6,1,3,4,6,5,5,6,3,2,6,2,3,3,4,5,2,4,5,4,4,5,0,5,6,4,5,5,6,3,4,1,5,4,4,5,6,2,4,3,4,4,5,0,2,3,5,4,4,5,2,1,5,1,2,2,3,4,1,3,4,3,3,4,6,4,5,3,4,4,5,2,3,0,4,3,3,4,5,1,3,2,3,3,4,6,1,2,4,3,3,4,1,0,4,0,1,1,2,3,0,2,3,2,2,3,5,3,4,2,3,3,4,1,2,6,3,2,2,3,4,0,2,1,2,2,3,5,0,1,3,2,2,3,0,6,3,6,0,0,1,2,6,1,2,1,1,2,4,2,3,1,2,2,3,0,1,5,2,1,1,2,3,6,1,0,1,1,2,4,6,0,2,1,1,2,6,5,2,5,6,6,0,1,5,0,1,0,0,1,3,1,2,0,1,1,2,6,0,4,1,0,0,1,2,5,0,6,0,0,1,3,5,6,1,0,0,1,5,4,1,4,5,5,6,0,4,6,0,6,6,0,2,0,1,6,0,0,1,5,6,3,0,6,6,0,1,4,6,5,6,6,0,2,4,5,0,6,6};
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int n;
        scanf("%d",&n);
        char s[][50]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
        printf("%s\n",s[a[n%294==0?294:n%294]]);
        //printf("%d\n",ans);
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值