[USACO08DEC]Patting Heads S题解
这里附上题目链接:[USACO08DEC]Patting Heads S。
~~手动分割~~
题目
思路解析
1.暴力搜索
- 将每头牛拿的数字存下。
- 分别将每头牛拿的数作为被除数,逐一检查剩下的n-1头牛能否整除被除数。
代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>int n,a[100002];//共有n头奶牛
int pat_number[1000002];//拿着数字i的牛需要拍打pat_number[i]头牛int main()
{int i,j;//输入数据scanf("%d",&n);for(i=1;i<=n;++i){scanf("%d",a+i);//输入数字a[i]}//for(i=1;i<=n;++i){if(pat_number[a[i]])//若拿着数字i的牛所需拍打的次数已经计算过{continue;}for(j=1;j<i;++j){if(a[i]%a[j]==0){pat_number[a[i]]++;}}for(j=i+1;j<=n;++j){if(a[i]%a[j]==0){pat_number[a[i]]++;}}}//输出结果for(i=1;i<=n;i++){printf("%d\n",pat_number[a[i]]);}return 0;
}
2.构造
每头牛手上都拿了一个数字。
从0次开始,只要数字 i 多出现一次,手上拿着的数为 i 的倍数的牛就会多拍拿着 i 的牛一次。
- 先找出所有牛拿的数字中最大的数字m。
scanf("%d",a+i);//输入数字a[i]m=max(m,a[i]);
- 统计每个数字出现的次数。
occurrence_number[*(a+i)]++;//数字a[i]出现的次数加一
- 从1到m,逐一判断。只要数字 i 至少出现了一次,就把所有拿着i的倍数的牛所需拍打的牛的数目加上 i 的出现次数。
//计算并输出结果for(i=1;i<=m;++i){if(occurrence_number[i])//若数字i至少出现了一次{for(j=1;j*i<=m;j++){pat_number[i*j]+=occurrence_number[i];//拿着数字i*j的牛需要多拍occurrence_number[i]次}}}
- 将所有牛所需拍打的次数减一,因为在计算时每头牛多拍了自己。
for(i=1;i<=n;++i){printf("%d\n",pat_number[a[i]]-1);//在计算时每头牛多拍了自己,所以要减掉自己}
AC代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define max(A,B) ((A)>(B)?(A):(B))int n,a[100002],m;//共有n头奶牛
int occurrence_number[1000002];//数字i出现了occurrence_number[i]次
int pat_number[1000002];//拿着数字i的牛需要拍打pat_number[i]头牛int main()
{int i,j;//输入数据并计算每个数出现的次数scanf("%d",&n);for(i=1;i<=n;++i){scanf("%d",a+i);//输入数字a[i]m=max(m,a[i]);occurrence_number[*(a+i)]++;//数字a[i]出现的次数加一}//计算并输出结果for(i=1;i<=m;++i){if(occurrence_number[i])//若数字i至少出现了一次{for(j=1;j*i<=m;j++){pat_number[i*j]+=occurrence_number[i];//拿着数字i*j的牛需要多拍occurrence_number[i]次}}}for(i=1;i<=n;++i){printf("%d\n",pat_number[a[i]]-1);//在计算时每头牛多拍了自己,所以要减掉自己}return 0;
}
[USACO08DEC]Patting Heads S题解相关推荐
- 【洛谷2926/BZOJ1607】[USACO08DEC]Patting Heads拍头(筛法)
题目: 洛谷2926 (截止至本博客发表时,BZOJ1607题面有误,正确题面请到洛谷2926查看) 分析: = 一句话题意:给定\(n\)个数\(\{a_i\}\),求对于每个\(a_i\)有多少个 ...
- [USACO08DEC]拍头Patting Heads 数学 BZOJ 1607
题目描述 It's Bessie's birthday and time for party games! Bessie has instructed the N (1 <= N <= 1 ...
- BZOJ1607 [Usaco2008 Dec]Patting Heads 轻拍牛头 筛法
欢迎访问~原文出处--博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1607 题意概括 给出n个数,每一个数字<1000000,对于每一个数,让你求剩余的n-1个数 ...
- BZOJ 1607 [Usaco2008 Dec]Patting Heads 轻拍牛头:统计 + 筛法【调和级数】
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1607 题意: 给你n个数,问你除a[i]之外,有多少个数是a[i]的约数. 题解: ans ...
- 【BZOJ】1607: [Usaco2008 Dec]Patting Heads 轻拍牛头
[算法]模拟 #include<cstdio> #include<algorithm> using namespace std; const int maxn=100010,m ...
- bzoj1607: [Usaco2008 Dec]Patting Heads 轻拍牛头
傻逼题...(然而一开始题意都不懂) #include<cstdio> #include<cstring> using namespace std; int n,a[11000 ...
- bzoj 1607: [Usaco2008 Dec]Patting Heads 轻拍牛头
翻过来考虑影响,考虑多少数是他的倍数. 1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 ...
- 【数学1】基础数学问题 - 题单 - 洛谷
这里写目录标题 [[数学1]基础数学问题 - 题单 - 洛谷](https://www.luogu.com.cn/training/117) [P1143 进制转换](https://www.luog ...
- 洛谷 深基 第4部分 基础数学与数论(19-21课)
洛谷 深基 第4部分 基础数学与数论 第19章 位运算与进制转换 P1143 进制转换 https://www.luogu.com.cn/problem/P1143 洛谷P1143 进制转换的Pyt ...
最新文章
- findHomography(src_points, dst_points, CV_RANSAC)
- gradle入门,安卓gradle入门
- frp后台运行和停止
- java如何进行字符串拼接?
- js数组截取前5个_想用好 Node.js?这 5 个经典国产项目值得细品
- Python框架篇之Django(Template基础:模板语法、过滤器filter)
- c语言成绩查询系统_如何用Excel制作成绩查询系统-Leo老师
- Git报错解决:fatal: unable to access ‘https://github.com/...‘: OpenSSL SSL_read:..., errno 10054
- 【转】使用AIDL实现进程间的通信之复杂类型传递
- 计蒜客 第一场 搜狗输入法
- 有没有在学习IT营2020年新出Go语言视频教程童鞋,一起探讨
- 查看TRP开头的数据量超过1000000的表的index情况
- Hadoop实战-MR倒排索引(三)
- 清华计算机专硕非全日制,清华大学2018年非全日制MSW专业学位招生信息
- rbf神经网络自适应控制matlab仿真,机械系统RBF神经网络控制:设计、分析及Matlab仿真(英文)...
- ElasticSearch中Cat接口详解
- 第四段第一天_数学模型之层次分析法
- 桥牌坐庄训练bm2000 level3闯关记录——A5
- 通过CFA一级有用吗?是什么水平?
- 根据属地id选择子属地