ACdream 1071
2016-05-28 20:41
211 查看
Description在计算机的世界里,%不是百分比,而是除法取余哟!比如: 4 % 2 = 0 5 % 3 = 2给你 2 ≤ N ≤ 100000 个数,a[1],a[2]...a[i]...a(1 ≤ a[i] ≤ 100000)。问有几个组合 (a[i], a[j]),(i != j, a[i] > a[j]),使得 a[i] % a[j] != 0。Input输入有多组数据。(<= 30)对于每组数据:第一行:N(表示 N 个数)第二行:N 个元素 a[i] Output输出有几个组合 (a[i],a[j]),使得 a[i] % a[j] != 0Sample Input
3 1 1 1 4 1 2 3 4 5 1 2 2 4 6
这道题比赛时蒙蔽了,也不知道是比赛时太烦躁了还是真的太笨了,看到复杂度那么大还一根经的去排序,筛选法和
打表法明明都会却不知道用,倍数明明比排序不知道要快多少倍啊,明天一定要冷静冷静,诶反正已经在淘汰的边缘了只管放开去想了
#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 100011;int a, b;int main(){ int n; while(cin>>n) { memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); int j=0; int Max=-1; for(int i=0;i<n;i++) { int x; cin>>x; if(a[x]==0) { b[j++]=x; } a[x]++; Max=max(Max,x); } sort(b,b+j); long long ans=0, s=0, sum=0; for(int i=0;i<j;i++) { int y=b[i]; ans+=s*a[y]; s+=a[y]; for(int k=2*y;k<=Max;k+=y) { sum+=a[y]*a[k]; } } cout<<ans-sum<<endl; } return 0;}
相关文章推荐
- 翻译 CRUSH: Controlled, Scalable,Decentralized Placement of Replicated Data
- python 使用记录
- 第二阶段个人工作总结(1)
- CF Round #354 Div.2
- Intellij 背景色 显示行数
- hdu3911(线段树,区间合并,延迟标记)
- 论文订阅的工具
- JSP学习笔记(6)-使用数据库
- Java面试基础总结
- Wcf+EF框架搭建实例
- 关于jfinal与spring整合的问题
- hive
- 状态模式和php实现
- 175. Combine Two Tables
- 第二次冲刺周期站立会议(2)
- oracle db mos文章 翻译系列
- Container With Most Water
- popuwindow实例
- POCO安装并测试
- UNIX环境高级编程笔记之进程控制