p1373【奶牛的卧室】

    

描述 Description
奶牛们有一个习惯,那就是根据自己的编号选择床号。如果一头奶牛编号是a,并且有0..k-1一共k张床,那么她就会选择a mod k号床作为她睡觉的地点。显然,2头牛不能睡在一张床上。那么给出一些奶牛的编号,请你为她们准备一间卧室,使得里面的床的个数最少。



输入格式 Input Format
第一行是奶牛的个数n(1<=n<=5000);第2到第n+1行是每头奶牛的编号Si(1<=Si<=1000000)。



输出格式 Output Format
仅一行,是最少的床的数目。


样例输入 Sample Input
5
4
6
9
10
13


样例输出 Sample Output
8


时间限制 Time Limitation
1s


注释 Hint
1s


来源 Source
未知 

      (这道题非常的水..........(OJ上的数据才水.......))

      第一次写数论题,也刚刚开始学,读题可知就是让你求(a-b)mod m=0求这个m的最小值,使得m不为任何一个差的约数

      所以刚开始先sort排序一遍,求出每两个数之间的差数,然后求出最小的m即可。这样一来不是直接bool型数组判断没两

      个数之间的约数使f[a[j]-a[i]]=true;然后在扫一遍不就完啦!!(这么水吗)但是你发现你只拿到了90分,

      为什么被挖了一组呢因为如果这两个数的倍数也为差数,那么这个m也不成立了哇,所以在判断一下这个

      数的约数是不是其他两个数的差即可了。

      

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<cmath>
 6 using namespace std;
 7 inline int read()
 8 {
 9     int x=0,f=1;
10     char ch=getchar();
11     while(ch>'9'||ch<'0')
12     {
13         if(ch=='-')
14             f=-1;
15         ch=getchar();
16     }
17     while(ch<='9'&&ch>='0')
18     {
19         x=x*10+ch-'0';
20         ch=getchar();
21     }
22     return x*f;
23 }
24 int a[5100];
25 bool vis[1001000];
26 int main()
27 {
28     int n;
29     n=read();
30     for(int i=1;i<=n;i++)
31     {
32         a[i]=read();
33     }
34     int ans=0;
35     sort(a+1,a+1+n);
36     for(int i=1;i<n;i++)
37     {
38         for(int j=i+1;j<=n;j++)
39         {
40             vis[a[j]-a[i]]=1;
41         }
42     }
43     /*for(int i=1;i<=a[n];i++)90分算法
44         if(!vis[i])
45         {
46             cout<<i<<endl;
47             break;
48         }*/
49     int h;
50     for(int i=2;i<=a[n];i++)
51     {
52         bool flag=false;
53         if(vis[i])
54             continue;
55         h=i*2;
56         while(h<a[n])//判断这个数的倍数是不是任意两个数的差
57         {
58             if(vis[h])
59             {
60                 flag=true;
61                 break;
62             }
63             h+=i;
64         }
65         if(!flag)
66         {
67             ans=i;
68             break;
69         }
70     }
71     cout<<ans<<endl;
72     return 0;
73 }
( • ̀ω•́ )✧

 

posted @ 2017-08-21 11:37  列車員lcy  阅读(290)  评论(0编辑  收藏  举报