zoukankan      html  css  js  c++  java
  • 1059-搬寝室

    描述

    换寝室是大家都不愿意碰到的事情,不幸的是,可怜的wwm高中大学都遇到了。 室友们有一个不成文的规定,那就是根据自己的学号选择床号。如果某同学的学号是a,并且有0..k-1一共k张床,那么他就会选择a%k号床作为他睡觉的地点。显然,两个人不能睡在一张床上。那么给出所有同学的学号,请你为他们准备一间卧室,使得里面的床的数量最少。

    输入

    第一行是同学的个数n(1<=n<=5,000);第2到第n+1行是每个同学的学号Si(1<=Si<=1,000,000)。

    输出

     

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

    样例输入

    5

    4

    6

    9

    10

    13

    样例输出

    8

    #include <iostream>
    #include <cmath>
    #include <vector>
    #include <algorithm>
    using namespace std;
    
    const int S = 1000001;
    const int N = 5001;
    
    char *bed = NULL;
    
    int main()
    {
        int n; 
        cin>>n;
    
        int i, j;
        vector<int> id(n);
    
        vector<int>::iterator it, it2;
        for (it=id.begin(); it!=id.end(); it++)
        cin>>*it;
    
        int idMax = *max_element(id.begin(), id.end());
    
        bed = new char[idMax +1];
        memset(bed, 0, (idMax+1) * sizeof(bed[0]));
    
        for (it = id.begin(); it != id.end()-1; it++)
        for (it2 = it+1; it2 != id.end(); it2++)
        bed[abs(*it - *it2)] = 1;
    
    
        int m = (int)sqrt(idMax);
        for (i=2; i <=m; i++) 
            for (j=n/i; j <= idMax/i; j++) 
                if (bed[i*j] != 0)
                    bed[i] = bed[j] = 1;
    
    
        for (i = n; i <S; i++)
            if (bed[i] == 0)
            {
                cout<< i <<endl; 
                break;
            }
    
        return 0;
    } 
    

      

  • 相关阅读:
    Discuz 页面不能加载插件的原因和解决方法
    discuz 插件核心函数hookscript分析.
    比较容易犯的一些智障错误(不定时修改)
    浅谈树状数组入门
    图论的小总结
    usaco 2009 12 过路费
    0122(本来是想ak的但是因为智障只拿了200。)
    图论
    欧拉路
    bfs
  • 原文地址:https://www.cnblogs.com/Rosanna/p/3436687.html
Copyright © 2011-2022 走看看