zoukankan      html  css  js  c++  java
  • B1607 [Usaco2008 Dec]Patting Heads 轻拍牛头 数学

    今天净做水题了,这个题还不到十五分钟就搞定了,思路特别简单,就是直接按照线性求因子个数的思路就行了。

    题干:

    Description
      今天是贝茜的生日,为了庆祝自己的生日,贝茜邀你来玩一个游戏.
        贝茜让N(1≤N≤100000)头奶牛坐成一个圈.除了1号与N号奶牛外,i号奶牛与i-l号和i+l号奶牛相邻.N号奶牛与1号奶牛相邻.农夫约翰用很多纸条装满了一个桶,每一张包含了一个独一无二的1到1,000,000的数字.
        接着每一头奶牛i从柄中取出一张纸条Ai.每头奶牛轮流走上一圈,同时拍打所有编号能整除在纸条上的数字的牛的头,然后做回到原来的位置.牛们希望你帮助他们确定,每一头奶牛需要拍打的牛.
    Input
        第1行包含一个整数N,接下来第2到N+1行每行包含一个整数Ai.
    Output
     
        第1到N行,每行的输出表示第i头奶牛要拍打的牛数量.
    Sample Input
    5  //有五个数,对于任一个数来说,其它的数有多少个是它的约数
    2 
    1
    2
    3
    4
    INPUT DETAILS:
    The 5 cows are given the numbers 2, 1, 2, 3, and 4, respectively.
    Sample Output
    2
    0
    2
    1
    3
    OUTPUT DETAILS:
    The first cow pats the second and third cows; the second cows pats no cows;
    
    etc.

    代码:

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<queue>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    #define duke(i,a,n) for(int i = a;i <= n;i++)
    #define lv(i,a,n) for(int i = a;i >= n;i--)
    #define clean(a) memset(a,0,sizeof(a))
    const int INF = 1 << 30;
    typedef long long ll;
    typedef double db;
    template <class T>
    void read(T &x)
    {
        char c;
        bool op = 0;
        while(c = getchar(), c < '0' || c > '9')
            if(c == '-') op = 1;
        x = c - '0';
        while(c = getchar(), c >= '0' && c <= '9')
            x = x * 10 + c - '0';
        if(op) x = -x;
    }
    template <class T>
    void write(T x)
    {
        if(x < 0) putchar('-'), x = -x;
        if(x >= 10) write(x / 10);
        putchar('0' + x % 10);
    }
    int n,a[100010];
    int num[1000010];
    int x[1000010],maxn = 0;
    int main()
    {
        read(n);
        duke(i,1,n)
        {
            read(a[i]);
            maxn = max(maxn,a[i]);
            num[a[i]]++; 
        }
        for(int i = 1;i <= maxn;i++)
        {
            if(num[i] != 0)
            {
                for(int j = 2 * i;j <= maxn;j += i)
                {
                    x[j] += num[i];
                }
            }
        }
        duke(i,1,n)
        {
            printf("%d
    ",x[a[i]] + num[a[i]] - 1);
        }
        return 0;
    }
    /*
    5
    2
    1
    2
    3
    4
    */
  • 相关阅读:
    JavaScript学习-自定义对象/
    网站特效:欢迎窗口/发表评论
    javacript中的事件
    DOM / DOM操作表格
    如何设置文本不换行省略号显示等CSS常用文本属性
    从零开始的H5生活
    Spring手动提交事务
    java基础学习之接口
    java基础学习之抽象类
    java基础学习之final关键字
  • 原文地址:https://www.cnblogs.com/DukeLv/p/9535640.html
Copyright © 2011-2022 走看看