zoukankan      html  css  js  c++  java
  • Codeforces Round #613 (Div. 2)

    D. Dr. Evil Underscores

    题意

    寻找一个x,使得他与数组中数的异或的最大值最小

    分析

    分治位运算

    代码

    
    inline int read()
    {
        char c=getchar();int x=0,f=1;
        while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
        while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
        return x*f;
    }
    vector<int >v;
    int dfs(int i,vector<int > &v)
    {
    	vector<int>v0,v1;
    	if(i<0)return 0;
    	for(auto j:v)
    	{
    		if((j>>i)&1)v1.push_back(j);//如果这一位是1 
    		else v0.push_back(j);//如果这一位是0 
    	}
    	if(v0.size()==0)return dfs(i-1,v1);//全是1
    	if(v1.size()==0)return dfs(i-1,v0);//全是0
    	return  min(dfs(i-1,v0),dfs(i-1,v1))+(1<<i);
    }
    main(void)
    {
    	int n=read();
    	_1for(i,n)
    	{
    		ll t=read();
    		v.push_back(t);
    	}
    	cout<<dfs(30,v)<<endl;
    }
    

    C

    题意

    给你一个整数X,求出最小公倍数是X的两个数a,b,并且要求a,b的二者较大值尽可能小。

    思路

    已知:最大公约数GCD(a,b)=p和最小公倍数LCM(a,b)=q的关系是:q=a*b/p ,即 LCM(a,b)=a * b / GCD(a,b) ——①;

    易知当 a∗b=X 时 max(a,b) 最小 ,且① 即 当GCD(a,b)=1 所以直接枚举答案判断。

    代码

    #include<bits/stdc++.h>
    #define int long long
    #define _0for(i, a) for(int i = 0; i < (a); ++i)
    #define _1for(i, a) for(int i = 1; i <=(a); ++i)
    using namespace std;
    int gcd(int p,int q)
    {
    	if(p==0)return q;
    	else
    	{
    		return gcd(q%p,p);
    	}
    }
    main(void)
    {
    
    	int a,b,x;
    	cin>>x;
    	for(int i=1;i*i<=x;i++)
    	{
    		if(x%i==0)
    		{
    			if(gcd(i,x/i)==1)
    			{
    				a=i;
    				b=x/i;
    			}
    		} 
    	}
    	printf("%lld %lld
    ",a,b);
    }
    
    
    
    
  • 相关阅读:
    Linux命令-chmod、chown和chgrp
    UUID是如何保证全局唯一的
    Java实现HTML转换为PDF的常见方法
    Java内存溢出详解
    Java 版本6下载大全
    spring 标签
    java 静态成员访问
    Java开发之@PostConstruct执行顺序
    Java集合和数组的区别
    集合转数组的toArray()和toArray(T[] a)方法
  • 原文地址:https://www.cnblogs.com/wangqianyv/p/13280717.html
Copyright © 2011-2022 走看看