zoukankan      html  css  js  c++  java
  • cf979d Kuro and GCD and XOR and SUM

    set做法
    正解是trie……

    主要是要学会 (a mathrm{xor} b leq a+b) 这种操作

    #include <iostream>
    #include <cstdio>
    #include <set>
    using namespace std;
    int q, opt, uu, vv, ww;
    set<int> se[100005];
    int main(){
    	cin>>q;
    	while(q--){
    		scanf("%d", &opt);
    		if(opt==1){
    			scanf("%d", &uu);
    			for(int i=1; i*i<=uu; i++)
    				if(uu%i==0){
    					se[i].insert(uu);
    					se[uu/i].insert(uu);
    				}
    		}
    		else{
    			scanf("%d %d %d", &uu, &vv, &ww);
    			//x, k, s
    			if(uu%vv){
    				printf("-1
    ");
    				continue;
    			}
    			set<int>::iterator it=se[vv].upper_bound(ww-uu);
    			if(se[vv].empty() || it==se[vv].begin()){
    				printf("-1
    ");
    				continue;
    			}
    			it--;
    			int sum=-1, ans=-1;
    			for(; it!=se[vv].begin(); it--){
    				if(sum>(*it)+uu)	break;
    				if(sum<((*it)^uu)){
    					sum = (*it) ^ uu;
    					ans = *it;
    				}
    			}
    			if(sum<((*it)^uu)){
    				sum = (*it) ^ uu;
    				ans = *it;
    			}
    			printf("%d
    ", ans);
    		}
    	}
    	return 0;
    }
    
  • 相关阅读:
    JavaScript面试库
    JS事件委托的原理和应用
    缓存ABC
    网络模型探究
    持续集成配置之Nuget
    angular应用容器化部署
    微服务随想
    .NET性能优化小技巧
    博客园博客小优化
    Emmet 简介
  • 原文地址:https://www.cnblogs.com/poorpool/p/9051372.html
Copyright © 2011-2022 走看看