• 洛谷 [P1154] 奶牛分厩


    类似筛法的思想

    本题实际上就是反推hash的模数,
    首先想到枚举k,但显然会超时。
    $a mod kb mod k <> k|(a-b) $ 由同余的定义可以知道
    所以我们的任务就变成的找到一个整数k使其不是任意一个 $ a-b $ 的因子,
    观察一下数据范围可以发现,我们可以预处理出所有的a-b,并用bool数组标记,然后从小往大枚举,对于每一个k来说,如果他的所有倍数都没有被标记的话,那么他就是答案。
    我们可以知道枚举的终点是最大的num

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    #include <cstdlib>
    #include <cmath>
    using namespace std;
    int init(){
    	int rv=0,fh=1;
    	char c=getchar();
    	while(c<'0'||c>'9'){
    		if(c=='-') fh=-1;
    		c=getchar();
    	}
    	while(c>='0'&&c<='9'){
    		rv=(rv<<1)+(rv<<3)+c-'0';
    		c=getchar();
    	}
    	return fh*rv;
    }
    bool f[1000005];
    int n,num[10005],ma;
    int main(){
    	freopen("in.txt","r",stdin);
    	n=init();
    	for(int i=1;i<=n;i++) num[i]=init();
    	sort(num+1,num+n+1);
    	for(int i=1;i<n;i++){
    		for(int j=i+1;j<=n;j++){
    			f[num[j]-num[i]]=1;
    			ma=max(ma,num[j]-num[i]);
    		}
    	}
    	for(int i=n;i<=num[n];i++){
    		if(f[i]) continue;
    		else {
    			int k=1;
    			bool fff=0;
    			while(i*k<=ma){
    				if(f[i*k]) {fff=1;break;}
    				k++;
    			}
    			if(!fff) {printf("%d
    ",i);break;}
    		}
    	}
    	fclose(stdin);
    	return 0;
    }
    
  • 相关阅读:
    ant脚本打jar包 自动获取时间以及项目svn版本号
    15分钟学会git基本的操作命令
    java后端模拟表单提交
    优秀js插件收藏
    javascript操作
    javascript常用方法整理--数组篇
    javascript exec方法
    javascript 拷贝
    自执行函数简单应用
    jsonp跨域原理解析
  • 原文地址:https://www.cnblogs.com/Mr-WolframsMgcBox/p/8430446.html
Copyright © 2020-2023  润新知