zoukankan      html  css  js  c++  java
  • 6-找数的倍数

    链接:https://www.nowcoder.com/acm/contest/71/A
    来源:牛客网

    时间限制:C/C++ 1秒,其他语言2秒
    空间限制:C/C++ 262144K,其他语言524288K
    64bit IO Format: %lld

    题目描

    给定n个正整数,请找出其中有多少个数x满足:在这n个数中存在数y=kx,其中k为大于1的整数

    输入描述:

    第一行输入一个n
    接下来一行输入n个正整数ai

    输出描述:

    输出符合条件个数
    示例1

    输入

    5
    1 2 3 4 5

    输出

    2

    说明

    5个数中1和2符合条件,1是后面每个数的因子,2是4的因子

    备注:

    1≤n,a
    i
    ≤1000000

    时间卡的真是佩服!

    刚开始准备交的代码:(能过,后来交的时候发现第一个for()太耗时间了,就准备用数组记录下来,就不需要那个遍历整个了,用空间换时间嘛,结果超时一晚!!!,代码在后面)
    #include <iostream>
    #include <algorithm>
    #include <cstdio>
    using namespace std;
    int a[1000005];
    int b[1000005];
    
    int main(){
    	int x, k = 0, n, max = -0x3f3f3f3f, t;
    	scanf("%d", &n);
    	t = n;
    	while(t--){
    		scanf("%d", &x);
    		a[x]++;	
    		if(x > max)
    			max = x;
    	}
    	int count = 0;
    	sort(b, b + n);
    	for(int i = 0; i < 1000005; i++){
    		if(a[i])
    			for(int j = i * 2; j <= max; j += i){
    				if(a[j]){ //判断它的倍数是否存在 
    					count += a[i];
    					break;
    				}
    			}
    	}
    	printf("%d
    ", count);
    	return 0;
    } 
    

      血与泪啊!!!

    #include <iostream>
    #include <algorithm>
    #include <cstdio>
    using namespace std;
    int a[1000005];
    int b[1000005];
    
    int main(){
    	int x, k = 0, n, max = -0x3f3f3f3f, t;
    	scanf("%d", &n);
    	t = n;
    	while(t--){
    		scanf("%d", &b[k++]);
    		a[b[k - 1]]++;			//记录并排序了有哪些数 
    		//b[k++] = x;  赋值耗时    //直接记录数,方便遍历的时候直接取 
    //		if(b[k - 1] > max) 
    //			max = b[k - 1];
    	}
    	int count = 0;
    //	sort(b, b + n);      //耗时
    	for(int i = 0; i < n; i++){
    		if(b[i] == 1){  //好吧,我加了一个辅助数组b来存储输入的数 
                count++;	//但当时没写这个判断超时了一晚,真是醉了!!! 
                continue;	//没用的辅助数组(i:0 ~ Max(甚至100001))的竟然都直接过了QAQ 
            }
    //		for(int j = 2; j * b[i] <= 1e6+5; j++){
    //			if(a[j * b[i]]){ //判断它的倍数是否存在 
    		for(int j = b[i] * 2; j <= 1e6+5; j += b[i]){ //上面的改成这样貌似好点
    			if(a[j]){
    				count++;
    				break;
    			}
    		}
    	}
    	printf("%d
    ", count);
    	return 0;
    } 
    

      

  • 相关阅读:
    JavaScript
    JavaScript
    目标
    pip安装问题:There was a problem confirming ssl certificate
    chromedriver,python国内镜像地址收集
    检查网络问题
    linux 三剑客
    常用linux命令
    KVM学习
    rsync笔记
  • 原文地址:https://www.cnblogs.com/zhumengdexiaobai/p/8407486.html
Copyright © 2011-2022 走看看