• tsinsen A1067. Fibonacci数列整除问题 dp


    A1067. Fibonacci数列整除问题
    时间限制:1.0s   内存限制:512.0MB  
    总提交次数:2796   AC次数:496   平均分:51.83
    将本题分享到:
       
     
    问题描述
      已知四个数:a,b,c,d,判断在第s个Fibonacci数到第t个Fibonacci数之间哪些数既不是a也不是b也不是c也不是d的倍数。
    输入格式
      第一行两个数,s,t,表示要判断第s个Fibonacci数到第t个Fibonacci数之间(包含第s个和第t个)的Fibonacci数。
      第二行四个数,a,b,c,d,意义如题目描述。
    输出格式
      一行若干个数,A1,A2,A3...An,从小到大排列,表示第Ai个Fibonacci数既不是a也不是b也不是c也不是d的倍数。
      每两个数之间用空格隔开。
    样例输入
    1 5
    2 3 5 7
    样例输出
    1 2
    数据规模和约定
      1<=s<=t<=10000, 1<=a,b,c,d<=10000
     
    dp[i][j]表示第i个数取第j个数的余数
    转移方程 dp[i][j]=(dp[i-1][j]+dp[i-2][j])%a[j]
    #include <cstdio>
    #include <cmath>
    #include <cstring>
    #include <ctime>
    #include <iostream>
    #include <algorithm>
    #include <set>
    #include <vector>
    #include <sstream>
    #include <queue>
    #include <typeinfo>
    #include <fstream>
    #include <map>
    typedef long long ll;
    using namespace std;
    //freopen("D.in","r",stdin);
    //freopen("D.out","w",stdout);
    #define sspeed ios_base::sync_with_stdio(0);cin.tie(0)
    #define maxn 10001
    #define eps 1e-9
    const int inf=0x7fffffff;   //无限大
    int main()
    {
        int f[maxn];
        f[1]=1;
        f[2]=1;
        for(int i=3;i<=10000;i++)
        {
            f[i]=f[i-1]+f[i-2];
        }
        int dp[maxn][4];
        memset(dp,0,sizeof(0));
        int s,t,k[4];
        cin>>s>>t>>k[0]>>k[1]>>k[2]>>k[3];
        for(int j=0;j<4;j++)
        {
            dp[1][j]=f[1]%k[j];
            dp[2][j]=f[2]%k[j];
        }
        for(int i=3;i<=10000;i++)
        {
            for(int j=0;j<4;j++)
            {
                dp[i][j]=(dp[i-1][j]+dp[i-2][j])%k[j];
                //cout<<i<<" "<<j<<" "<<dp[i][j]<<endl;
            }
        }
        int first=1;
        for(int i=s;i<=t;i++)
        {
            int flag=0;
            for(int j=0;j<4;j++)
            {
                if(dp[i][j]!=0)
                    flag++;
            }
            if(flag==4)
            {
                if(first)
                {
                    cout<<i;
                    first=0;
                }
                else
                    cout<<" "<<i;
            }
        }
        cout<<endl;
        return 0;
    }
     
  • 相关阅读:
    winget
    splunk单节点容器部署
    jumpserver容器化部署
    思科acl
    Java springboot-plus
    接口 Postman 上传图片测试
    EF 数据迁移 新
    电商 抓取淘宝分类 包含图片和名称
    思维导图 淘宝上新流程
    功能模块 上传视频 生成视频预览图
  • 原文地址:https://www.cnblogs.com/qscqesze/p/4294574.html
Copyright © 2020-2023  润新知