Patting Heads S
今天是贝茜的生日,为了庆祝自己的生日,贝茜邀你来玩一个游戏。
贝茜让 N(1 ≤ N ≤ 10 5) 头奶牛坐成一个圈。除了 1 号与 N 号奶牛外,i 号奶牛与 i-1 号和 i+1 号奶牛相邻。N 号奶牛与 1 号奶牛相邻。农夫约翰用很多纸条装满了一个桶,每一张包含了一个不一定是独一无二的 1 到 106 的数字。
接着每一头奶牛 i 从柄中取出一张纸条 Ai。每头奶牛轮流走上一圈,同时拍打所有手上数字能整除在自己纸条上的数字的牛的头,然后做回到原来的位置。牛们希望你帮助他们确定,每一头奶牛需要拍打的牛。
输入输出样例
输入 #1
5
2
1
2
3
4
输出 #1
2
0
2
1
3
说明/提示
有五只牛编号分别为2,1,2,3,4。
第一只牛被第二只、第三只牛拍,一共拍了 2 下。
下面我写了三种方案,本质相同,只是查询、存储上不同。
暴力法 ------ O(n2)
解题思路
管他三七二十一,直接把每头牛的编号从1倍开始都加上 1 ,最终输出答案减去自己就行!
#include<bits/stdc++.h>
using namespace std;
int A[100010], ans[1000010];
int main(){
// freopen("data.txt", "r", stdin);
int n;
scanf("%d", &n);
for(int i=0; i<n; i++){
scanf("%d", &A[i]);
for(int j=1; j*A[i]<=1000000; j++){
ans[j*A[i]]++;
}
}
for(int i=0; i