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;
    }
    
  • 相关阅读:
    四则运算
    四则运算二
    学习进度条
    四则运算一
    课堂测试七
    问题与思考6
    问题与思考5
    问题与思考04
    Android SDK 目录说明
    如何判断视频的比例(4:3/16:9)和分辨率?
  • 原文地址:https://www.cnblogs.com/poorpool/p/9051372.html
Copyright © 2011-2022 走看看