【水题一道】7的倍数

水题解析——7的倍数


题面:

【题目名称】7的倍数
【时间限制】每个测试点300ms
【空间限制】128M

【题目描述】
给定一个各项均不相同且项数为n的正整数数列:A1,A2,A3,……,An.从中选取若干个数(至少一个),使这些数之和为7的倍数.求共有多少种不同的选法.
测试数据分为两类:
A类:数列由输入数据直接给出;
B类:给定k(k<=100000)个正整数:p1,p2,p3,……,pk.数列由通项公式:
An=p1^n+p2^n+p3^n+……+pk^n确定.
【输入格式】
第一行,两个整数n,k:其中n表示数列项数.若k=0,则表示该组数据为A类数据;若k>0,则表示该组数据为B类数据.
第二行,若为A类数据,则接下来有n个互不相同的正整数,其中第i个数表示数列的第i项;若为B类数据,则接下来有k个正整数:p1,p2,p3,…,pk.(具体含义见题目描述)
【输出格式】
一个非负整数,表示共有多少种选法.由于答案可能很大,请mod 1000000007后输出.
【样例输入1】
6 0
1 2 3 4 5 6
【样例输出1】
9
【样例输入2】
4 2
3 5
【样例输出2】
2
【数据范围与约定】
对于20%的数据,k=0,1<=n<=20;
对于60%的数据,k=0,1<=n<=100000;
对于另 40%的数据,1<=k<=10^5,1<=n<=10^18.


数据:

这题数据并没有什么特别之处,在此就不提供数据了。


题解:

20分算法:搜索

只处理A类数据.

  1. 很裸很裸的暴力搜索;
  2. 依次枚举每个数选与不选;
  3. 然后验证并计数;
  4. 时间复杂度O(2^n).

20分暴搜代码:

#include<cstdio>
#define mod 1000000007
int n,k,A[1100],cnt=0;
void dfs(int p,int num)
{
    if(p>n)
    {
        cnt+=(num%7==0);
        if(cnt>mod)
        {
            cnt-=mod;
        }
        return ; 
    }
    dfs(p+1,num);
    dfs(p+1,num+A[p]);
    return ;
}
int main()
{
    scanf("%d%d",&n,&k);//只处理A类数据; 
    for(int i=1;i<=n;i++)
    {
         scanf("%d",&A[i]);
    }
    dfs(1,0);//深搜;
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值