码迷,mamicode.com
首页 > 其他好文 > 详细

CF354C Vasya and Beautiful Arrays

时间:2018-09-28 10:53:32      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:namespace   include   个数   flag   时间   beautiful   clu   scan   bit   

这题感觉可海星a....网上题解包括官方题解的时间复杂度都玄学得一匹,数据比较弱吧....不卡.....

发现一位大佬做法值得学习。

首先要找序列所有数的最大公因数,肯定上界是最小的那个数吧。然后我们排序遍历每一个数,若发现不满足的数,即a[i]%ans>k(不能在k的范围内调整);

那么ans=a[i]/(a[i]/ans+1);这样能最小范围地调整并且省去一些多余的判断,比如ans=8,a[i]=11;ans=11/2=5,可以直接省去中间判断6,7的过程。

此时跳出再判断,当一遍下来不需要再改就满足了。

上代码:

 1 #include<bits/stdc++.h>
 2 #define maxn 300005
 3 using namespace std;
 4 int n,k,a[maxn];
 5 void init(){
 6     scanf("%d%d",&n,&k);
 7     for(int i=1;i<=n;i++) scanf("%d",&a[i]);
 8     sort(a+1,a+n+1);
 9     int ans=a[1];
10     while(1){
11         bool flag=0;
12         for(int i=1;i<=n;i++){
13             if(a[i]%ans>k){//不能减到 
14                 ans=a[i]/(a[i]/ans+1);
15                 flag=1;
16                 break;
17             } 
18         } 
19         if(!flag){//所有数都能满足 
20             printf("%d",ans);
21             break;
22         }
23     }
24     
25 }
26 int main(){
27     init();
28     
29     return 0;
30 }

 

CF354C Vasya and Beautiful Arrays

标签:namespace   include   个数   flag   时间   beautiful   clu   scan   bit   

原文地址:https://www.cnblogs.com/degage/p/9716651.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!