• 【BZOJ】3834: [Poi2014]Solar Panels


    http://www.lydsy.com/JudgeOnline/problem.php?id=3834

    题意:求$max{(i,j)}, smin<=i<=smax, wmin<=i<=wmax$,其中$smin<=smax<=10^9, wmin<=wmax<=10^9$,有$N<=1000$组数据

    #include <bits/stdc++.h>
    using namespace std;
    int main() {
    	int cs, smin, smax, wmin, wmax, ans; scanf("%d", &cs);
    	while(cs--) {
    		scanf("%d%d%d%d", &smin, &smax, &wmin, &wmax);
    		if(smax>wmax) swap(smin, wmin), swap(smax, wmax);
    		ans=1;
    		if(wmin<=smax && smax<=wmax) ans=smax;
    		else {
    			--smin; --wmin;
    			for(int d=smax, pos; d; d=pos) {
    				pos=max(smax/(smax/d+1), wmax/(wmax/d+1));
    				if(smin>=d) pos=max(pos, smin/(smin/d+1));
    				if(wmin>=d) pos=max(pos, wmin/(wmin/d+1));
    				if(smax/d-smin/d>0 && wmax/d-wmin/d>0) { ans=d; break; }
    			}
    		}
    		printf("%d
    ", ans);
    	}
    	return 0;
    }
    

      

    假设$smax<=wmax$

    如果$wmin<=smax<=wmax$,显然答案就是$smax$

    考虑枚举$d=gcd$,那么转换为在区间$[ lfloor frac{smin}{d} floor, lfloor frac{smax}{d} floor ] 和 [ lfloor frac{wmin}{d} floor, lfloor frac{wmax}{d} floor ]$找$[(i, j)]=1$表示存在$gcd(i,j)=d$

    于是我就很sb了............我为什么一定要$[(i,j)]=1$呢.............然后膜拜了zyf千古神犇....发现其实$[(i,j)]>=1$就行了= =.............因为我很sb没想到.......倍数关系啊= =

    于是分块查询即可..

    复杂度$O(N4sqrt{smax})$

  • 相关阅读:
    Django会话之session(手动设置)
    Django model字段类型参考列表
    Django会话之cookie(手动设置)
    Java AES加密
    Java AES加密
    Java JDBC
    Java JDBC
    Java-Map
    Java-Map
    Java-螺旋方阵
  • 原文地址:https://www.cnblogs.com/iwtwiioi/p/4274849.html
Copyright © 2020-2023  润新知