• CF1648B Integral Array


    题目描述

    You are given an array aa of nn positive integers numbered from 11 to nn . Let's call an array integral if for any two, not necessarily different, numbers xx and yy from this array, x \ge yx≥y , the number \left \lfloor \frac{x}{y} \right \rfloor⌊yx​⌋ ( xx divided by yy with rounding down) is also in this array.

    You are guaranteed that all numbers in aa do not exceed cc . Your task is to check whether this array is integral.

    输入格式

    The input consists of multiple test cases. The first line contains a single integer tt ( 1 \le t \le 10^41≤t≤104 ) — the number of test cases. Description of the test cases follows.

    The first line of each test case contains two integers nn and cc ( 1 \le n \le 10^61≤n≤106 , 1 \le c \le 10^61≤c≤106 ) — the size of aa and the limit for the numbers in the array.

    The second line of each test case contains nn integers a_1a1​ , a_2a2​ , ..., a_nan​ ( 1 \le a_i \le c1≤ai​≤c ) — the array aa .

    Let NN be the sum of nn over all test cases and CC be the sum of cc over all test cases. It is guaranteed that N \le 10^6N≤106 and C \le 10^6C≤106 .

    输出格式

    For each test case print Yes if the array is integral and No otherwise.

    题意翻译

    题意 : 给定一个数组 \ a a , 我们称该数组完整需要满足 :若数组\ a a 中存在两数 \ x,y\ \ x,y  , 使 \ y \le x\ \ y≤x  (\ x,y\ x,y  可以是同一个数) , 则\left\lfloor\dfrac{x}{y}\right\rfloor⌊yx​⌋也必须在数组\ a a 中 , 现需要判断数组\ a a 是否完整 。

    \ T\le 10^4 ,\sum n\le 10^6,\sum c\le 10^6 T≤104,∑n≤106,∑c≤106 , 其中\ T T 为数据组数 , \ n n 为\ a a 的元素个数,满足\ a a 中元素\le c≤c 。

    输入输出样例

    输入 #1复制

    4
    3 5
    1 2 5
    4 10
    1 3 3 7
    1 2
    2
    1 1
    1

    输出 #1复制

    Yes
    No
    No
    Yes

    输入 #2复制

    1
    1 1000000
    1000000

    输出 #2复制

    No

    说明/提示

    In the first test case it is easy to see that the array is integral:

    • \left \lfloor \frac{1}{1} \right \rfloor = 1⌊11​⌋=1 , a_1 = 1a1​=1 , this number occurs in the arry
    • \left \lfloor \frac{2}{2} \right \rfloor = 1⌊22​⌋=1
    • \left \lfloor \frac{5}{5} \right \rfloor = 1⌊55​⌋=1
    • \left \lfloor \frac{2}{1} \right \rfloor = 2⌊12​⌋=2 , a_2 = 2a2​=2 , this number occurs in the array
    • \left \lfloor \frac{5}{1} \right \rfloor = 5⌊15​⌋=5 , a_3 = 5a3​=5 , this number occurs in the array
    • \left \lfloor \frac{5}{2} \right \rfloor = 2⌊25​⌋=2 , a_2 = 2a2​=2 , this number occurs in the array

    Thus, the condition is met and the array is integral.

    In the second test case it is enough to see that

    \left \lfloor \frac{7}{3} \right \rfloor = \left \lfloor 2\frac{1}{3} \right \rfloor = 2⌊37​⌋=⌊231​⌋=2 , this number is not in aa , that's why it is not integral.

    In the third test case \left \lfloor \frac{2}{2} \right \rfloor = 1⌊22​⌋=1 , but there is only 22 in the array, that's why it is not integral.

     题意:任选两个数x,y(可能是同一个,也可能是不同的),看对任意的xy(x>=y),x/y下取整是否在数组里出现过,如果出现过就符合题意,只要有一组没出现就输出no。

    思路:暴力肯定会t,那么我们就反着来想,假设x/y=i,x的范围就是y*i<=x<y*(i+1),我们选一个在数组中的数y和一个不在数组中的数i,那么得到的x应该是不在数组中的,即在y*i<=x<y*(i+1)这个范围内没有数在数组中。

    那么我们要处理这个问题的话,用一个数组来记录一下一个数有没有在数组中出现过,先出现过试1,没出现过是0,那么我们先遍历一遍1~c,找到一个i表示出现过的数之后,再遍历一遍1~c,找一个j表示没有出现过的数,那么由他们算出的x就不可能出现在这个数组,即y*i<=x<=y*(i+1)-1这段的子段和是0.如果大于0的话不符合题意,直接输出no,注意边界问题,我们找的时候因为找i*j,所以当进行j的循环的时候,条件就可以设置为i*k<=c,当算出y*(i+1)-1这个右边界的时候,我们要拿他和c比较取最小值。

    1. #include<iostream>
    2. #include<algorithm>
    3. #include<cmath>
    4. #include<cstring>
    5. #include<map>
    6. using namespace std;
    7. const int N=1000005;
    8. typedef long long ll;
    9. int n,c;
    10. int s[N],a[N];
    11. void sove(){
    12. cin>>n>>c;
    13. for(int i=1;i<=c;i++){
    14. a[i]=s[i]=0;
    15. }
    16. for(int i=1;i<=n;i++){
    17. int x;
    18. cin>>x;
    19. a[x]=1;
    20. }
    21. for(int i=1;i<=c;i++)s[i]=s[i-1]+a[i];
    22. for(int i=1;i<=c;i++){
    23. if(a[i]==0)continue;
    24. for(int j=1;i*j<=c;j++){
    25. if(a[j]==1)continue;
    26. int l=i*j-1;
    27. int r=min(c,i*(j+1)-1);
    28. if(s[r]-s[l]>0){
    29. cout<<"No"<<endl;
    30. return ;
    31. }
    32. }
    33. }
    34. cout<<"Yes"<<endl;
    35. }
    36. int main(){
    37. ios::sync_with_stdio(false);
    38. cin.tie() ,cout.tie() ;
    39. int t;
    40. cin>>t;
    41. while(t--){
    42. sove();
    43. }
    44. return 0;
    45. }

  • 相关阅读:
    售卖机控制板开发,轻松实现线下售卖和线上运营
    Android Material Design
    基于稳态视觉诱发电位和注意力脑电的混合脑机接口系统
    02.接口隔离原则(Interface Segregation Principle)
    npm run build 报错:error TS7026: JSX element implicitly has type
    数据结构——图の选择题整理
    C#实现OPC DA转OPC UA服务器
    【算法篇-搜索与图论】适合算法入门小白理解的深度优先搜索(DFS )以及解决全排列数字
    C++ 炼气期之算术运算符
    【TSP】基于matlab GUI免疫算法结合蚁群算法求解旅行商问题【含Matlab源码 1910期】
  • 原文地址:https://blog.csdn.net/qq_61903556/article/details/125605675