zoukankan      html  css  js  c++  java
  • 济南学习 Day 5 T1 晚

    取模(mod)

    【题目描述】

    有一个整数a和n个整数b_1, …, b_n。在这些数中选出若干个数并重新排列,得到c_1,…, c_r。我们想保证a mod c_1 mod c_2 mod … mod c_r=0。请你得出最小的r,也就是最少要选择多少个数字。如果无解,请输出-1.

    【输入说明】

    输入文件的第一行有一个正整数T,表示数据组数。

    接下去有T组数据,每组数据的第一行有两个正整数n和a.

    第二行有n个正整数b_1, …, b_n.

    【输出说明】

    一行,输出答案。

    【样例输入】

    2

    2 9

    2 7

    2 9

    6 7

    【样例输出】

    2

    -1

    【数据范围】

    对于40%的数据,n<=8

    对于100%的数据,T<=5,n<=20,1 <=a <=10^6,b_i<=10^6

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #define INF 2100000000
     6 using namespace std;
     7 int T,n,a[100000],ans,x;
     8 int cmp(int x,int y)
     9 {
    10     return x>y;
    11 }
    12 void Dfs(int w,int t,int now)// w数组下标 now X现在的值 t 用了数组中的多少个数 
    13 {
    14     if(t>=ans) return;
    15     if(now==0) { ans=t;return; } 
    16     if(w==n+1) return;
    17     Dfs(w+1,t,now);
    18     Dfs(w+1,t+1,now%a[w]);
    19 }
    20 int main()
    21 {
    22     scanf("%d",&T);
    23     while(T--)
    24     {
    25         scanf("%d%d",&n,&x);
    26         memset(a,0,sizeof a );
    27         for(int i=1;i<=n;i++)
    28           scanf("%d",&a[i]);
    29         sort(a+1,a+1+n,cmp);
    30         ans=INF;
    31         Dfs(1,0,x);
    32         if(ans==INF) printf("-1
    ");
    33         else printf("%d
    ",ans);
    34     }
    35     return 0;
    36 }

    思路:对于一个数X对他取模,先模一个小的数再模一个大的数肯定没啥卵用,所以我们要从大到小排序,优先模大的数,恩,就酱紫~~

  • 相关阅读:
    从零开始学习内网渗透之域环境的搭建
    ssrf漏洞学习(PHP)
    自己写的Weblogic的poc
    某CTF平台一道PHP代码审计
    某CTF平台一道PHP代码注入
    从xxe-lab来深入学习xxe漏洞
    Git常用命令
    一个简单的基于MINI2440开发板的启动代码
    面试题
    Linux多线程及线程同步简单实例
  • 原文地址:https://www.cnblogs.com/suishiguang/p/6043537.html
Copyright © 2011-2022 走看看