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

    A. Piles With Stones

    水题略

    B. And

    题意:让输入一个n,一个下,之后输入一个长为n的数组a,可以在a中使a变为a&x,问经过几次变化数组中有相同的数

    思路:当数组中有两个相同的数时直接输出0,注意a&x后的数无论在与x经过几次按位与运算都不会发生变化,

    该题有特殊情况,在数据相当大时可能出现错误,因此要ans=min(ans,1或2),在这最后系统wa了,难受emmmmm

    知识点补充:只有1&1=1

    代码:

    #include <bits/stdc++.h>
    
    using namespace std;
    
    int n,x;
    long long a[200000+10],vis[200000+10];
    
    map<long long,long long>mp;
    map<long long,long long>mp1;
    
    int main()
    {
        ios::sync_with_stdio(false);cin.tie(0);
        cin>>n>>x;
        mp.clear();
        for(int i=0;i<n;i++){
            cin>>a[i];
            mp[a[i]]++;
        }
        map<long long,long long>::iterator it=mp.begin();
    
    
        for(it;it!=mp.end();it++){
            if((it->second)>1){
                cout<<"0"<<endl;
                return 0;
            }
        }
    
        mp1.clear();int ans=3;
        for(int i=0;i<n;i++){
            int m=a[i]&x;
    
            if(mp[m]!=0&&m!=a[i])
            {
                ans=min(ans,1);
            }
            else if(mp1[m]!=0){
                    ans=min(ans,2);
            }
            else mp1[m]++;
        }
    
        if(ans==3) cout<<"-1"<<endl;
        else cout<<ans<<endl;
    
        return 0;
    }

     C.Photo of The Sky

    题意:输入一个n,接下来输入一个长度为2*n的数组,代表n组坐标中的x,y,让你找出n组坐标,使得组成的矩形面积最小

    首先对数组进行枚举找出满足条件的最小矩形:

    ans=(a[n*2]-a[1])*(a[n+i-1]-a[i]),该等式为一条边最长另一条边最短的情况,乘号两边分别代表x的长度和y的长度,当一个数组中同一个数达到n个,也就使得a[n+i-1]-a[i]=0从而最小面积为0,而因为(a[n*2]-a[1])使得该边可以任意选取a(假设该边为x),另一条边(假设为y)则可以选择n+i-1到i上的元素,把问题可以转换成x轴选取n个元素与y轴选取n个元素,因为a[n*2]为最大的数,a[1]为最小的数,这使得无论数组有多么奇葩,都可以放在x轴上,我们再来看y轴,因为n+i-1-i=n-1,所以这些坐标都可以在矩形上

    同时不要忘记ans=1LL*(a[n]-a[1])*(a[n*2]-a[n+1]);的情况

    #include <bits/stdc++.h> 
    
    using namespace std;
    
    int n;
    long long a[100000+100];
    
    int main()
    {
        ios::sync_with_stdio(false);cin.tie(0);
        cin>>n;;
        for (int i=1;i<=n*2;i++) cin>>a[i];
        sort(a+1,a+n*2+1);
        long long ans=1LL*(a[n]-a[1])*(a[n*2]-a[n+1]);
        for (int i=2;i<=n;i++) ans=min(ans,1LL*(a[n*2]-a[1])*(a[n+i-1]-a[i]));
        cout<<ans;
        return 0;
    }
  • 相关阅读:
    OpenStack平台监控脚本-基础版
    制作rpm包,可以免除多次编译安装
    openstack安装指南
    服务器状态持续监控脚本
    搭建OpenStack私有云准备工作
    一键配置openstack-cata版的在线yum源
    openstack的yum源出错,配置openstack-ocata版的在线yum源,openstack的yum源配置
    py小结一
    Windows在cmd界面运行C++程序
    数字三角形「动态规划」
  • 原文地址:https://www.cnblogs.com/Fy1999/p/9393379.html
Copyright © 2011-2022 走看看