博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浅谈桶排思想及[USACO08DEC]Patting Heads 题解
阅读量:5123 次
发布时间:2019-06-13

本文共 2188 字,大约阅读时间需要 7 分钟。

一、桶排思想

1.通过构建n个空桶再将待排各个元素分配到每个桶。而此时有可能每个桶的元素数量不一样,可能会出现这样的情况:有的桶没有放任何元素,有的桶只有一个元素,有的桶不止一个元素可能会是2+;

2.按照下标对内容非0的桶按个数输出下标;

二、[USACO08DEC]Patting Heads题解

Description

-It's Bessie's birthday and time for party games! Bessie has instructed the N (1 <= N <= 100,000) cows conveniently numbered 1..N to sit in a circle (so that cow i [except at the ends] sits next to cows i-1 and i+1; cow N sits next to cow 1). Meanwhile, Farmer John fills a barrel with one billion slips of paper, each containing some integer in the range 1..1,000,000.Each cow i then draws a number A_i (1 <= A_i <= 1,000,000) (which is not necessarily unique, of course) from the giant barrel. Taking turns, each cow i then takes a walk around the circle and pats the heads of all other cows j such that her number A_i is exactly.divisible by cow j's number A_j; she then sits again back in her original position.The cows would like you to help them determine, for each cow, the number of other cows she should pat.

inout:
-Line 1: A single integer: N
-Lines 2..N+1: Line i+1 contains a single integer: A_i
output:
-Lines 1..N: On line i, print a single integer that is the number of other cows patted by cow i.

Solution

1.题目意为输出所有当前手上纸条数为当前牛手上纸条数因子的牛的序号。

2.因为数据规模到了1e6所以有很大概率有重复标记,使用桶排思路,a数组记地址,num数组用桶排计数,ans数组记录因子个数;
3.从较小的数开始对其倍数进行ans数组中因数的累加;
4.因为自己作为自己的因子也会被累加记得最后对结果-1,用a数组记地址作下标输出ans[a[i]]-1;

#include
#include
#include
#include
using namespace std;inline int rd(){ int x=0; char c; c=getchar(); while(c<'0'||c>'9') c=getchar(); while(c<='9'&&c>='0') //邢神的读入优化 { x=(x<<1)+(x<<3)+(c^48); c=getchar(); } return x;}int n,Max,a[100005],num[1000005],ans[1000005];int main(){ n=rd(); for (int i=1;i<=n;i++) a[i]=rd(),num[a[i]]++,Max=max(Max,a[i]); for (int i=1;i<=Max;i++) { if (num[i]==0) continue; for (int j=i;j<=Max;j+=i) ans[j]+=num[i]; //桶排思想对Max内i的倍数进行因数的累加 } for (int i=1;i<=n;i++) printf("%d\n",ans[a[i]]-1); //(因为自己作为自己的因子也会被累加记得最后对结果-1)用a数组记地址作下标输出ans[a[i]]-1 return 0;}

转载于:https://www.cnblogs.com/COLIN-LIGHTNING/p/8092782.html

你可能感兴趣的文章
C#double转化成字符串 保留小数位数, 不以科学计数法的形式出现。
查看>>
SpringMVC学习总结(三)——Controller接口详解(1)
查看>>
牛的障碍Cow Steeplechase
查看>>
Zookeeper选举算法原理
查看>>
3月29日AM
查看>>
利用IP地址查询接口来查询IP归属地
查看>>
HTML元素定义 ID,Class,Style的优先级
查看>>
构造者模式
查看>>
http和https的区别
查看>>
Hbuild在线云ios打包失败,提示BuildConfigure Failed 31013 App Store 图标 未找到 解决方法...
查看>>
找到树中指定id的所有父节点
查看>>
今天新开通了博客
查看>>
AS3优化性能笔记二
查看>>
Java高阶回调,回调函数的另一种玩法
查看>>
ElasticSearch(站内搜索)
查看>>
4----COM:a Generative Model for group recommendation(组推荐的一种生成模型)
查看>>
UVA 11137 - Ingenuous Cubrency
查看>>
js阻止事件冒泡的两种方法
查看>>
Java异常抛出
查看>>
CGRect知多少
查看>>