首页 > 其他分享 >洛谷题单指南-数学基础问题-P2926 [USACO08DEC] Patting Heads S

洛谷题单指南-数学基础问题-P2926 [USACO08DEC] Patting Heads S

时间:2024-04-10 10:44:21浏览次数:25  
标签:cnt Heads 记录 int 洛谷题 个数 Patting 整除 P2926

原题链接:https://www.luogu.com.cn/problem/P2926

题意解读:有n个数,计算每个数能整除其他数的个数。

解题思路:

a[100005]记录所有的数,h[1000005]记录所有数的个数,cnt[1000005]记录所有数能整除其他数的个数

只需要读入a数组,同时更新h[a[i]]++

再依次从小到大遍历h的下标每一个数i,如果h[i] > 0,则用类似于素数筛的方法,依次判断i的倍数j = 2i,3i,4i....是否存在

如果h[j] > 0,就将cnt[j]++,说明j可以整除的数多了一个

注意相同的数可以有多个,也就是h[i]可能大于1,要记录相同的数也能互相整除,可以把cnt[i]加上h[i] - 1, 

例如:有两个2,h[2] = 2,2能被2整除,cnt[2] += 1 

100分代码:

#include <bits/stdc++.h>
using namespace std;

const int N = 1e5 + 5, M = 1e6 + 5;

int a[N], h[M], cnt[M]; //a:每头牛的数字  h:每个数字出现的次数 cnt:每个数字能整除的数字个数
int n, maxn;

int main()
{
    scanf("%d", &n);
    for(int i = 1; i <= n; i++) 
    {
        scanf("%d", &a[i]);
        h[a[i]]++;
        maxn = max(maxn, a[i]);
    }

    for(int i = 1; i <= maxn; i++)
    {
        if(h[i])
        {
            cnt[i] += h[i] - 1; //h[i]个相同的i,对于i可整除的数增加h[i] - 1
            for(int j = i + i; j <= maxn; j += i)
            {
                if(h[j]) cnt[j] += h[i];
            }
        }
    }

    for(int i = 1; i <= n; i++) printf("%d\n", cnt[a[i]]);
}

 

标签:cnt,Heads,记录,int,洛谷题,个数,Patting,整除,P2926
From: https://www.cnblogs.com/jcwy/p/18125534

相关文章

  • 洛谷题单指南-数学基础问题-P2638 安全系统
    原题链接:https://www.luogu.com.cn/problem/P2638题意解读:把a个红球、b个黑球放入n个盒子,求所有的方法。解题思路:盒子中可以放也可以不放,可以放任意个,因此,题目可以转化为将i个红球(0<=i<=a),j个黑球(0<=j<=b)放入n个盒子的方案数之和,设f(n,i,j)表示将一个红球、j个黑球放入n......
  • 洛谷题单指南-数学基础问题-P3913 车的攻击
    原题链接:https://www.luogu.com.cn/problem/P3913题意解读:车所在的行、列一共有多个个格子。解题思路:假设3*3的棋盘,有三个车分析得知,三个车覆盖了第1、2两行,第2、3两列,覆盖的格子数用公式计算就是2*3+2*3-2*2=8也就是两行格子数加两列格子数再减去交叉点。因此......
  • 洛谷题单指南-数学基础问题-P2789 直线交点数
    原题链接:https://www.luogu.com.cn/problem/P2789题意解读:n条直线可以形成不同交点数的方案数。解题思路:对于n=1、2、3、4的情况进行模拟:n=1时,有1种不同的交点数n=2时,有2种不同的交点数n=3时,有3种不同的交点数n=4时,有5种不同的交点数对n=4的情况,分情况讨......
  • 洛谷题单指南-数学基础问题-P1866 编号
    原题链接:https://www.luogu.com.cn/problem/P1866题意解读:N个整数M1~Mn,对每个整数Mi,选取1~Mi之间的一个数,使得N个数都不一样的选法。解题思路:将M1~Mn由小到大排序,第1个的选法有M1种第2个的选法有M2-1种第3个的选法有M3-2种......第n个选法有Mn-n+1种全部相乘取模即可。......
  • 洛谷题单指南-数学基础问题-P1017 [NOIP2000 提高组] 进制转换
    原题链接:https://www.luogu.com.cn/problem/P1017题意解读:负进制数的转换。解题思路:下面给出两种思路1、枚举法从数据范围来看,∣n∣≤37336,因此,可以对该r进制的数进行枚举,每一次枚举,都计算r进制数对应的十进制数是否和n相等,相等则输出该r进制数。主要问题就是要解决r进制......
  • 洛谷题单指南-数学基础问题-P1100 高低位交换
    原题链接:https://www.luogu.com.cn/problem/P1100题意解读:将32位二进制数的高低16位交换位置。解题思路:给定无符号整数a,假设二进制高16为h,低16位为l,即a表示为hl,a>>16得到0h,a<<16得到l0,两者相加即得到lh,交换完毕。需要注意的是,无符号整数的表示是unsignedint,如果是int,......
  • 洛谷题单指南-数学基础问题-P1469 找筷子
    原题链接:https://www.luogu.com.cn/problem/P1469题意解读:找到落单的整数,其他整数都可以配对。解题思路:利用异或的特性:1、整数和自己异或x^x=02、任何数和0异或x^0=x因此,将所有数异或起来,结果就是落单的整数。100分代码:#include<bits/stdc++.h>usingnamespa......
  • 洛谷题单指南-数学基础问题-P1143 进制转换
    原题链接:https://www.luogu.com.cn/problem/P1143题意解读:进制转换的模版题,n进制转10进制,10进制转m进制。解题思路:1、对于n进制数转10进制,如abcd转10进制,根据定义是a*n^3+b*n^2+c*n+d,在程序中迭代处理:for(inti=0;i<s.length();i++)dec=dec*n+s[i]需要注......
  • 洛谷题单指南-图的基本应用-P1983 [NOIP2013 普及组] 车站分级
    原题链接:https://www.luogu.com.cn/problem/P1983题意解读:由于“如果这趟车次停靠了火车站x,则始发站、终点站之间所有级别大于等于火车站x的都必须停靠”。因此,在始发站和终点站之间,能停靠的车站都是级别较高的,没有停靠的车站都是级别较低的,计算最少有多少个不同级别。解题思路:......
  • 洛谷题单指南-图的基本应用-P1347 排序
    原题链接:https://www.luogu.com.cn/problem/P1347题意解读:在给出多对关系字母的比较关系之后,判断能否确定所有字母的顺序。解题思路:对字母的关系建立图,如A<B建立A指向B的一条边。如果在拓扑排序过程中,每次寻找入度为0的点只有一个,且最终可以形成拓扑序,则可以确定所有字母的顺......