zoukankan      html  css  js  c++  java
  • 奶牛卧室

    奶牛卧室

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 60  解决: 18
    [提交][状态][讨论版]

    题目描述

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

    输入

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

    输出

    仅一行,是最少的床的数目。

    样例输入

    5
    4
    6
    9
    10
    13
    

    样例输出

    8
    【分析】a%k!=b%k 即(a-b)%k!=0,所以排除所有的差,若某个k不是其中的差,但是他的倍数是其中的差,也要排除,然后就是找了
    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cmath>
    #include <algorithm>
    #include <climits>
    #include <cstring>
    #include <string>
    #include <set>
    #include <map>
    #include <queue>
    #include <stack>
    #include <vector>
    #include <list>
    #include<functional>
    #define mod 1000000007
    #define inf 0x3f3f3f3f
    #define pi acos(-1.0)
    using namespace std;
    typedef long long ll;
    const int N=1000005;
    const int M=15005;
    int vis[N],b[N];
    int main(){
        int n,p,k;
        scanf("%d",&n);
        for(int i = 0; i < n; i++) scanf("%d",&b[i]);
        sort(b,b+n);
        for(int i = 0; i < n-1; i++) for(int j = i+1; j < n; j++) vis[b[j]-b[i]] = 1;
        for(k = 2; k <= b[n-1]; k++){
            bool flag = false;
            int j;
            if(vis[k]) continue;
            p = k*2;
            while(p <= b[n-1]){
                if(vis[p]){ flag = true; break; }
                p += k;
            }
            if(!flag) break;
        }
        printf("%d
    ",k);
        return 0;
    }
    View Code
  • 相关阅读:
    Linux环境下安装Tigase XMPP Server
    虚拟机几种网络连接方式的区别
    MySQL修改root密码
    Eclipse使用多个Console
    Eclipse导入Java项目时“No projects are found to import”错误的处理
    GitHub上下载源代码的方法
    Tigase XMPP Server的安装
    MySQL的安装与配置
    Windows下查看JDK是否安装以及安装路径
    archive for required library...
  • 原文地址:https://www.cnblogs.com/jianrenfang/p/5751842.html
Copyright © 2011-2022 走看看